Cod sursa(job #1182852)
Utilizator | Data | 7 mai 2014 21:53:37 | |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 50 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 3.16 kb |
type lista=^celula;
celula=record
info:longint;
pred:lista;
end;
var lda:array[1..100005] of lista;
gr,viz : array [1..100005] of longint;
a,b,n,m,i,ok,key:longint;
b1,b2 : array [0..1 shl 17] of char;
procedure add(v:longint; var p:lista);
var r:lista;
begin
new(r);
r^.info:=v;
r^.pred:=p;
p:=r;
end;
procedure euler(nod : longint);
var r,v : lista;
ok : byte;
begin
if lda[nod]<>nil then begin
write(nod,' ');
key:=lda[nod]^.info;
lda[nod]:=lda[nod]^.pred;
v:=lda[key];
ok:=0;
while ok=0 do
if lda[key]^.info=nod then begin
r:=lda[key];
lda[key]:=lda[key]^.pred;
dispose(r);
ok:=1;
end
else
while v<>nil do begin
if v^.info=nod then begin
r^.pred:=v^.pred;
dispose(v);
ok:=1;
end;
r:=v;
v:=v^.pred;
end;
euler(key);
end;
end;
procedure dfs(nod:longint);
var r:lista;
begin
viz[nod]:=1;
r:=lda[nod];
while r<>nil do begin
if viz[r^.info]=0 then dfs(r^.info);
r:=r^.pred;
end;
end;
begin
assign(input,'ciclueuler.in'); settextbuf(input,b1); reset(input);
assign(output,'ciclueuler.out'); settextbuf(output,b2); rewrite(output);
readln(n,m); ok:=0;
for i:=1 to m do begin
readln(a,b);
add(b,lda[a]);
gr[b]:=gr[b]+1;
add(a,lda[b]);
gr[a]:=gr[a]+1;
end;
dfs(1);
for i:=1 to n do
if viz[i]=0 then begin
writeln('-1'); //verif.conexitatea
ok:=1;
break;
end;
if ok=0 then
for i:=1 to n do
if gr[i] mod 2=1 then begin
writeln('-1');
ok:=1;
break;
end;
if ok=0 then euler(1);
close(input);
close(output);
end.