Cod sursa(job #407854)
#include <stdio.h>
#include <list>
#define size 100000
using namespace std;
int n,m,poz,nod,x,a,b;
list <int> L[size];
int grad[size],st[size];
int main ()
{
freopen ("ciclueuler.in","r",stdin);
freopen ("ciclueuler.out","w",stdout);
scanf ("%d %d",&n,&m);
for (int i=0;i<m;i++)
{
scanf ("%d %d",&a,&b);
grad[a]++;
grad[b]++;
L[a].push_back(b);
L[b].push_back(a);
}
for (int i=1;i<=n;i++)
if (grad[i]%2==1)
{
printf("-1\n");
return 0;
}
st[poz=1]=1;
while (poz)
{
x=st[poz];
if (!L[x].empty())
{
nod=L[x].front();
L[x].pop_front();
list<int> :: iterator it;
for (it=L[nod].begin() ; it!=L[nod].end() && *it!=st[poz] ;it++);
L[nod].erase(it);
st[++poz]=nod;
}
else
printf("%d ",st[poz--]);
}
return 0;
}