Cod sursa(job #699726)
#include<fstream>
#include<vector>
#include<deque>
#define dim 100001
using namespace std;
vector< vector<int> > mat(dim);
int n,m;
deque<int> dq;
inline void citire()
{
freopen("ciclueuler.in","r",stdin);
scanf("%d%d",&n,&m);
for(;m;--m)
{
int x,y;
scanf("%d%d",&x,&y);
mat[x].push_back(y);
mat[y].push_back(x);
}
}
inline void euler(int k)
{
freopen("ciclueuler.out","w",stdout);
dq.push_front(k);
while( !dq.empty() )
{
int x,y;
x=dq.front();
if( ! mat[x].size() )
{
printf("%d ",x);
dq.pop_front();
continue;
}
y=mat[x].back();
mat[x].pop_back();
dq.push_front(y);
vector<int>::iterator it;
for(it=mat[y].begin();it!=mat[y].end();++it)
if(*it==x)
{
mat[y].erase(it);
break;
}
}
}
int main()
{
citire();
int ok=0;
for(int i=1;i<=n;++i)
if(mat[i].size()%2)
ok=1;
if(!ok)
euler(1);
}