Pagini recente » Cod sursa (job #1001018) | Cod sursa (job #129045) | Cod sursa (job #2024648) | Infoarena Monthly 2014 - Runda 9, Solutii | Cod sursa (job #393432)
Cod sursa(job #393432)
#include<fstream.h>
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int Nmax=100001;
const int Mmax=500001;
struct elem
{ int inf;
elem *urm;
}*a[Nmax];
long n,m,nr,st[Mmax],b[Mmax],d[Nmax],viz[Nmax];
void add(long x,long y)
{
elem *p=new elem;
p->inf =y;
p->urm=a[x];
a[x]=p;
}
void citire()
{
long x,y;
f>>n>>m;
for(long i=0;i<m;i++)
{
f>>x>>y;
d[x]++;
d[y]++;
add(x,y);
add(y,x);
}
}
void afisare()
{
for(int i=1;i<nr;i++)
{
g<<b[i]<<" ";
}
}
void df(int x)
{
viz[x]=1;
for(elem *p=a[x];p;p=p->urm)
if(!viz[p->inf])
df(p->inf);
}
int grad()
{
for(int i=1;i<=n;i++)
if(d[i]%2!=0 || viz[i]==0)
return 0;
return 1;
}
void sterge(long x,long y)
{
elem *p=a[x];
a[x]=a[x]->urm;
delete p;
if(a[y]->inf!=x)
{
for(p=a[y];p->urm;p=p->urm)
if(p->urm->inf==x)
{
elem *q=p->urm;
p->urm=p->urm->urm;
delete q;
break;
}
}
else
{
p=a[y];
a[y]=a[y]->urm;
delete p;
}
}
void stiva1()
{
long niv=1;
st[niv]=1;
while(niv)
{
long v=st[niv];
if(a[v])
{
niv++;st[niv]=a[v]->inf;
sterge(v,a[v]->inf);
}
else
b[++nr]=st[niv--];
}
}
void stiva(long niv,long x)
{
st[niv]=x;
if(a[x])
{
long y=a[x]->inf;
sterge(x,y);
stiva(niv+1,y);
}
b[++nr]=st[niv];
}
int main()
{
citire();
df(1);
if(grad())
{
stiva1();
afisare();
}
else
g<<-1<<'\n';
g.close();
return 0;
}