Pagini recente » Cod sursa (job #540839) | Cod sursa (job #1636304) | Cod sursa (job #500151) | Cod sursa (job #3169141) | Cod sursa (job #411270)
Cod sursa(job #411270)
const infile='ciclueuler.in';
outfile='ciclueuler.out';
maxn=100003;
maxm=500003;
type adresa=^pnod;
pnod=record nod:longint; next:adresa; end;
var g:array[1..maxn]of adresa;
gr:array[1..maxn]of longint;
S:array[1..maxm]of longint;
n,m,nr:longint;
procedure citire;
var i,j,k:longint;
r:adresa;
begin
assign(input,infile); reset(input); readln(n,m);
for k:=1 to m do begin
readln(i,j);
new(r); r^.nod:=j; r^.next:=g[i]; g[i]:=r;
new(r); r^.nod:=i; r^.next:=g[j]; g[j]:=r;
inc(gr[i]); inc(gr[j]);
end;
close(output);
end;
function verifica:boolean;
var i:longint;
begin
i:=1; while(i<=n)and((gr[i] mod 2<>1)and(gr[i]<>0))do inc(i);
if(i>n)then verifica:=true
else verifica:=false;
end;
procedure solve;
var u,v:longint;
r,p:adresa;
begin
nr:=1; S[nr]:=1;
while(nr>0)do begin
u:=S[nr];
if(g[u]<>nil)then begin
inc(nr); v:=g[u]^.nod; S[nr]:=v;
r:=g[u]; g[u]:=r^.next; dispose(r);
r:=g[v]; p:=nil;
while(r^.nod<>u)do begin p:=r; r:=r^.next; end;
if(p=nil)then begin g[v]:=r^.next; dispose(r); end
else begin p^.next:=r^.next; dispose(r); end;
end
else begin write(S[nr],' '); dec(nr); end;
end;
end;
begin
citire;
assign(output,outfile); rewrite(output);
if not verifica then write(-1)
else solve;
close(output);
end.