Cod sursa(job #949111)
#include <fstream>
#include <vector>
using namespace std;
#define LE 100666
#define pb push_back
#define x first
#define y second
#define mp make_pair
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<pair<int,int> > H[LE];
bool fr[LE];
int xx,yy,i,K,A[LE];
int n,m;
void euler(int nod)
{
int N=H[nod].size();
bool OKZ=false;
for(int i=0; i<N; ++i)
if (fr[H[nod][i].y]==false)
{
fr[H[nod][i].y]=true;
OKZ=true;
euler(H[nod][i].x);
break;
}
if (OKZ==false)
A[++K]=nod;
else euler(nod);
}
int main()
{
f>>n>>m;
for(i=1; i<=m; ++i)
{
f>>xx>>yy;
H[xx].pb(mp(yy,i));
H[yy].pb(mp(xx,i));
}
euler(1);
for(i=1;i<K;++i)
g<<A[i]<<" ";
f.close();
g.close();
return 0;
}