Pagini recente » Cod sursa (job #1706113) | Cod sursa (job #1694112) | Cod sursa (job #1982322) | Cod sursa (job #2345036) | Cod sursa (job #2145696)
#include <iostream>
#include <stack>
#include <vector>
#include <cstdio>
#define N 500005
using namespace std;
struct muchie
{
int viz, x, y;
}g[N];
int n, m;
vector <int> graf[N], sol;
stack <int> drum;
void citire()
{
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=0;
graf[g[i].x].push_back(i);
graf[g[i].y].push_back(i);
}
}
void ciclu_euler()
{
drum.push(1);
while(!drum.empty())
{
int nod=drum.top();
if(graf[nod].size())
{
int nod2=graf[nod].back();
graf[nod].pop_back();
if(!g[nod2].viz)
{
g[nod2].viz=1;
if(g[nod2].x==nod)
drum.push(g[nod2].y);
else
drum.push(g[nod2].x);
}
}
else
{
sol.push_back(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);
citire();
if(e_euler())
{
ciclu_euler();
for(int i=0;i<sol.size()-1;i++)
printf("%d ", sol[i]);
}
else
printf("-1");
return 0;
}