Pagini recente » Cod sursa (job #1404258) | Cod sursa (job #427297) | Cod sursa (job #470418) | Cod sursa (job #1499604) | Cod sursa (job #408796)
Cod sursa(job #408796)
#include<stdio.h>
#define Nmax 100010
#define Mmax 500010
struct nod
{
int drum;
nod *urm;
} *l[Nmax];
int N,st[Mmax],vf,nr[Nmax];
void sterge(nod *&inc,int info)
{
if (inc->drum==info)
{
nod *q=inc;
inc=inc->urm;
delete q;
return ;
}
for(nod *t=inc; t->urm ; t=t->urm)
if ((t->urm)->drum==info)
{
nod *q=t->urm;
t->urm=q->urm;
delete q;
return ;
}
}
int wrong()
{
for(int i=1;i<=N;++i)
if (nr[i]%2==1)
return 1;
return 0;
}
void solve()
{
if (wrong())
{
printf("-1\n");
return ;
}
st[++vf]=1;
int nod,leg;
for(; vf ;)
{
nod=st[vf];
if (l[ nod ])
{
leg=l[nod]->drum;
st[++vf]=leg;
l[nod]= l[nod]->urm;
sterge(l[leg],nod);
}
else
{
if (vf>1)
printf("%d ",nod);
--vf;
}
}
printf("\n");
}
void cit();
void add(nod *&inc,int info)
{
nod *p=new nod;
p->drum=info;
p->urm=inc;
inc=p;
}
int main()
{
cit();
solve();
return 0;
}
void cit()
{
int a,b,M;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&N,&M);
for(; M ;--M)
{
scanf("%d%d",&a,&b);
nr[a]++;
nr[b]++;
add(l[a],b);
add(l[b],a);
}
}