Pagini recente » Cod sursa (job #923727) | Cod sursa (job #34387) | Cod sursa (job #562001) | Cod sursa (job #1100611) | Cod sursa (job #594714)
Cod sursa(job #594714)
type pnod=^nod;
nod = record
info : longint;
next : pnod;
end;
const f = 'ciclueuler.in'; gg = 'ciclueuler.out';
const max_n = 100001;
max_m = 500001;
var
c : array[1..max_n] of pnod;
gr : array[1..max_m] of longint;
v, sol : array[1..max_n] of longint;
n, m, nc : longint;
a, b, vf, i, x, y : longint;
procedure add( var dest : pnod; val : longint );
var
q : pnod;
begin
new( q );
q^.next := dest;
q^.info := val;
dest := q;
end;
function eulerian : boolean;
var
i : longint;
begin
eulerian := true;
for i := 1 to n do
if (gr[i] mod 2 = 1 ) or (gr[i] = 0) then begin
eulerian := false;
break;
end;
end;
procedure del( x, y : longint );
var
q, p : pnod;
begin
q := c[x];
c[x] := c[x]^.next;
dispose( q );
if c[y]^.info = x then begin
q := c[y];
c[y] := c[y]^.next;
dispose( q );
end
else begin
q := c[y];
while q^.next^.info<> x do q := q^.next;
p := q^.next;
q^.next := p^.next;
dispose( p );
end;
end;
begin
assign( input,f ); reset( input );
assign( output,gg ); rewrite( output );
readln( n, m );
for i := 1 to m do begin
readln( x,y );
add(c[x],y);
add(c[y],x);
inc( gr[x] ); inc( gr[y] );
end;
if not eulerian then writeln('-1') else
vf := 1;
v[vf] := 1;
while vf <> 0 do begin
a := v[vf];
if (c[a] <> nil ) then begin
//viz[c[a]^.info] := 1;
//viz[v[a]] := 1;
inc( vf );
v[vf] := c[a]^.info;
del(a,c[a]^.info);
end
else begin
inc( b );
//viz[v[a]] := 1;
sol[b] := v[vf];
dec( vf );
end;
end;
for i := 1 to b-1 do write(sol[i],' ');
end.