Pagini recente » Cod sursa (job #2672266) | Cod sursa (job #2500528) | Cod sursa (job #2249815) | Cod sursa (job #192233) | Cod sursa (job #1123455)
#include <cstdio>
using namespace std;
int st[100001],sf[100001],dest[1000001],next[1000001],euler[1000001],enext[1000001],prev[1000001];
int i,n,m,poz,x,y,q=0,aux;
void remove(int x,int nod)
{
if(prev[x]==0){st[nod]=next[x];}
if(next[x]==0){sf[nod]=prev[x];}
next[prev[x]]=next[x];
prev[next[x]]=prev[x];
}
void add(int x, int y)
{
if(st[x]){next[sf[x]]=poz;}
else{st[x]=poz;}
prev[poz]=sf[x];dest[poz]=y;next[poz]=0;sf[x]=poz;
}
int reverse(int q){if(q%2){return q+1;}return q-1;}
void findcicle(int nod)
{
x=st[nod];
if(x==0){if(nod!=euler[i]){q=1;printf("-1");}return;}
remove(reverse(x),dest[x]);
remove(x,nod);
poz++;
euler[poz]=dest[x];
enext[poz]=poz+1;
findcicle(dest[x]);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=m;i++){
scanf("%ld%ld",&x,&y);
poz++;add(x,y);poz++;add(y,x);
}
euler[1]=1;poz=1;
for(i=1;i<=m;i++){
if(euler[i]==0){printf("-1");q=1;}
else{
if(st[euler[i]]){
aux=enext[i];
enext[i]=poz+1;
findcicle(euler[i]);
enext[poz]=aux;
}
}
if(q){return 0;}
}
i=1;
while(euler[enext[i]]){printf("%d ",euler[i]);i=enext[i];}
return 0;
}