Pagini recente » Cod sursa (job #3039197) | Cod sursa (job #560820) | Cod sursa (job #1524313) | Cod sursa (job #315925) | Cod sursa (job #1835229)
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#define SZ(x) ((int) (x).size())
using namespace std;
const int nmax=100001, mmax=500001;
FILE *f,*g;
vector <int> G[nmax];
bool viz[mmax];
int from[mmax], to[mmax];
int n,m;
vector <int> V; //gen solutiei
void read()
{int i,x,y;
fscanf(f,"%d%d",&n,&m);
for(i=0;i<m;i++)
{fscanf(f,"%d%d",&x,&y);
G[x].push_back(i);
G[y].push_back(i);
from[i]=x;
to[i]=y;
}
fclose(f);
}
void solution()
{
stack <int> S;
S.push(1);
while(!S.empty())
{ int nod=S.top();
if(!G[nod].empty())
{int e=G[nod].back();
G[nod].pop_back();
if(!viz[e])
{viz[e]=1;
int to=::from[e]^::to[e]^nod;
S.push(to);
}}
else
{S.pop();
V.push_back(nod);
}
}
}
void print()
{
for(int i=0;i<SZ(V)-1;++i)
fprintf(g,"%d ",V[i]);
fprintf(g,"\n");
}
int main()
{ f=fopen("ciclueuler.in","r");
g=fopen("ciclueuler.out","w");
read();
int i;
for(i=1;i<=n;i++)
if(SZ(G[i])&1==1)
{fprintf(g,"-1\n"); return 0;}
solution();
print();
fclose(g);
return 0;
}