Cod sursa(job #408448)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 101
#define MMAX 501
int aa[NMAX],bb[NMAX],*w[NMAX],i,j,n,m,k,l,*xx[NMAX],a,s,b,*x[NMAX],y[NMAX],z[NMAX];
struct kkt
{
int X,Y;
};
kkt q[MMAX];
void euler(int nod)
{
for (int j=1;j<=x[nod][0];j++)
{
i=x[nod][j];
if (i)
{
x[nod][j]=0;
if (nod!=i)
x[i][xx[nod][j]]=0;
euler(i);
}
}
y[++y[0]]=nod;
}
int sort(const void *a, const void *b)
{
kkt x = *(kkt *) a;
kkt y = *(kkt *) b;
if (x.X<y.X)
return -1;
if (x.X>y.X)
return 1;
if (x.X==y.X)
{
if (x.Y<y.Y)
return -1;
if (x.Y>y.Y)
return 1;
}
return 0;
}
int main()
{
freopen("ciclu.in","r",stdin);
freopen("ciclu.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d",&q[i].X,&q[i].Y);
aa[q[i].X]++;
if (q[i].X!=q[i].Y)
aa[q[i].Y]++;
z[q[i].X]++;
z[q[i].Y]++;
}
qsort(q+1,m,sizeof(q[0]),sort);
for (i=1;i<=n;i++)
{
x[i] = new int [aa[i]+2];
xx[i]= new int [aa[i]+2];
x[i][0]=0;
}
for (i=1;i<=m;i++)
{
x[q[i].X][++x[q[i].X][0]]=q[i].Y;
if (q[i].X!=q[i].Y)
x[q[i].Y][++x[q[i].Y][0]]=q[i].X;
xx[q[i].X][x[q[i].X][0]]=x[q[i].Y][0];
if (q[i].X!=q[i].Y)
xx[q[i].Y][x[q[i].Y][0]]=x[q[i].X][0];
}
for (i=1;i<=n;i++)
if (z[a]%2==1)
{
printf("-1\n");
return 0;
}
euler(1);
for (i=y[0];i>=2;i--)
printf("%d ",y[i]);
return 0;
}