Cod sursa(job #302867)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 9 aprilie 2009 12:54:36
Problema Ciclu Eulerian Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.42 kb
type lista=^element;
     element=record
         i:longint;
         a:lista;
           end;
var g:array[1..500100] of longint;
    v:array[1..100100] of lista;
    lg,n,m,a,b,i:longint;
    p:lista;
    ok:boolean;
procedure euler(nod:longint);
    var w,q:lista;
        k,r:longint;

    begin
      inc(lg); g[lg]:=nod;
      k:=1;
      while k<=lg do
         begin
           w:=v[g[k]];
           if w<>nil then
              begin
                while (w^.i=0)and(w^.a<>nil) do w:=w^.a;
                if w^.i<>0 then
                  begin
                inc(lg); g[lg]:=w^.i;
                r:=w^.i;
                w^.i:=0;
                q:=v[r];
                while q^.i<>g[k] do q:=q^.a;
                q^.i:=0;
                   end;
              end;
           inc(k);
         end;
    end;
begin
assign(input,'ciclueuler.in'); reset(input);
assign(output,'ciclueuler.out'); rewrite(output);
readln(n,m);
for i:=1 to m do
  begin
    readln(a,b);
    inc(g[a]); inc(g[b]);
    new(p);
    p^.i:=a; p^.a:=v[b];
    v[b]:=p;
    new(p);
    p^.i:=b; p^.a:=v[a];
    v[a]:=p;
  end;
ok:=true;
for i:=1 to n do if (g[i] mod 2<>0)or(g[i]=0) then ok:=false;
if not ok then writeln('-1')
          else
            begin
              lg:=0;
              euler(1);
              for i:=1 to lg-1 do write(g[i],' ');
            end;
close(input); close(output);
end.