Cod sursa(job #899683)
#include <fstream>
#include <vector>
#include <iostream>
#include <list>
#define INF (1<<30)-1
#define nmax 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < int > v[nmax],sol;
list < int > stiva;
int n,viz[nmax];
int euler()
{
int i;
for(i=1;i<=n;i++)
if(v[i].size()%2==1) return 0;
return 1;
}
int main()
{
f>>n;
int i,j,m,x,y,nod;
f>>m;
for(i=0;i<m;i++)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
if(!euler())
g<<-1;
else
{
stiva.push_back(1);
while(!stiva.empty())
{
nod=stiva.front();
if(!v[nod].empty())
{
x=v[nod][0];
stiva.push_front(x);
for(i=0;i<v[x].size();i++)
if(v[x][i]==nod)
{
v[x][i]=v[x][v[x].size()-1];
v[x].pop_back();
break;
}
if(v[nod].size())
{
v[nod][0]=v[nod][v[nod].size()-1];
v[nod].pop_back();
}
}
else {
if(sol.empty() || nod!=sol[0]) sol.push_back(nod);
stiva.pop_front();
}
}
for(i=0;i<sol.size();i++)
g<<sol[i]<<' ';
}
}