Pagini recente » Cod sursa (job #2665619) | Cod sursa (job #2939974) | Cod sursa (job #2022477) | Cod sursa (job #2675381) | Cod sursa (job #1497830)
#include <cstdio>
using namespace std;
const int N=100005;
const int M=500005;
struct eul
{
int x,y;
};
eul v[2*M];
int e[2*M],lst[N],urm[2*M],c[M],par[N];
bool folosit[M],marcat[N];
int nr,i,y,rc,n,m;
void ad(int i)
{
e[++nr]=i;
urm[nr]=lst[v[i].x];
lst[v[i].x]=nr;
e[++nr]=i;
urm[nr]=lst[v[i].y];
lst[v[i].y]=nr;
}
int celalalt(int i,int x)
{
if(v[i].x==x)
return v[i].y;
else
return v[i].x;
}
void eul(int x)
{
int p;
p=lst[x];
while(p!=0)
{
i=e[p];
y=celalalt(i,x);
if(!folosit[i])
{
folosit[i]=true;
eul(y);
}
p=urm[p];
}
c[++rc]=x;
}
int main()
{
FILE *in,*out;
in=fopen("ciclueuler.in","r");
out=fopen("ciclueuler.out","w");
int i,x,y,ok=0;
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d%d",&v[i].x,&v[i].y);
par[v[i].x]++;
par[v[i].y]++;
}
for(i=1;i<=n;i++)
if(par[i]%2==1)
ok=1;
for(i=1;i<=m;i++)
ad(i);
eul(1);
for(i=1;i<=rc;i++)
{
marcat[c[i]]=1;
}
for(i=1;i<=n;i++)
{
if(marcat[i]==0)
ok=1;
}
if(ok==1)
fprintf(out,"-1");
else
{
for(i=1;i<=rc-1;i++)
fprintf(out,"%d ",c[i]);
}
return 0;
}