Pagini recente » Cod sursa (job #1582102) | Cod sursa (job #177498) | Cod sursa (job #3149972) | Cod sursa (job #1333919) | Cod sursa (job #1631784)
const
maxN=100002;
maxE=500002;
type ed=record
x,y:longint;
end;
var raspuns,st:array[1..MaxE] of longint;
edges,nodes,i,j,u,k:longint;
edge:array[1..MaxE] of ed;
degree:array[1..MaxN] of longint;
function eulerian:boolean;
begin
i:=1;
while (i<=nodes) and not(odd(degree[i])) and (degree[i]<>0) do inc(i);
if i>nodes then eulerian:=true
else eulerian:=false;
end;
function next(x:integer):integer;
var i,j:integer;
begin
for i:=1 to edges do
if (edge[i].x<>0) and (edge[i].x=x) then
begin
next:=edge[i].y;
exit;
end;
for i:=1 to edges do
if (edge[i].y<>0) and (edge[i].y=x) then
begin
next:=edge[i].x;
exit;
end;
end;
procedure erase(a,b:integer);
var i,j:integer;
begin
for i:=1 to edges do
if (edge[i].x=a) and (edge[i].y=b) then
begin
edge[i].x:=0;
edge[i].y:=0;
break;
end;
{ for j:=i to edges do
begin
edge[j].x:=edge[j+1].x;
edge[j].y:=edge[j+1].y;
end;
dec(edges); }
dec(degree[a]);
dec(degree[b]);
end;
procedure eulerfind(node:longint);
var neigh:longint;
begin
while degree[node]>0 do
begin
neigh:=next(node);
erase(node,neigh);
eulerfind(neigh);
end;
inc(u);
raspuns[u]:=node;
end;
Begin
assign(input,'ciclueuler.in'); reset(input);
assign(output,'ciclueuler.out'); rewrite(output);
fillchar(degree,sizeof(degree),0);
readln(input,nodes,edges);
for i:=1 to edges do
begin
readln(input,edge[i].x,edge[i].y);
if edge[i].x<>edge[i].y then begin inc(degree[edge[i].x]); inc(degree[edge[i].y]); end;
end;
//verificare
if not(eulerian) then
begin
write('-1');
exit;
end;
//verificare
u:=0; k:=0;
EulerFind(1);
for i:=2 to u do write(output,raspuns[i],' ');
close(input);
close(output);
End.