Pagini recente » Cod sursa (job #2221647) | Cod sursa (job #1125667) | Cod sursa (job #2936825) | Cod sursa (job #1937627) | Cod sursa (job #2124880)
#include <iostream>
#include <stack>
#include <cstdio>
#include <vector>
#define N 100005
#define M 500005
using namespace std;
struct muchie
{
int x, y;
bool viz;
}g[M];
int n, m, sol[M];
vector <int> graf[M];
stack <int> drum;
void parcurg()
{
drum.push(1);
while(!drum.empty())
{
int nod=drum.top();
if(graf[nod].size())
{
int urm=graf[nod].back();
graf[nod].pop_back();
if(g[urm].viz==true)
continue;
g[urm].viz=true;
if(g[urm].x==nod)
drum.push(g[urm].y);
else
drum.push(g[urm].x);
}
else
{
sol[++sol[0]]=drum.top();
drum.pop();
}
}
}
int e_euler()
{
for(int i=1;i<=n;i++)
if(graf[i].size()%2==1)
return 0;
return 1;
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for(int i=1;i<=m;i++)
{
scanf("%d %d\n", &g[i].x, &g[i].y);
g[i].viz=false;
graf[g[i].x].push_back(i);
graf[g[i].y].push_back(i);
}
if(!e_euler())
printf("-1");
else
{
parcurg();
for(int i=1;i<sol[0];i++)
printf("%d ", sol[i]);
}
return 0;
}