Pagini recente » Cod sursa (job #2359193) | Cod sursa (job #1655103) | Cod sursa (job #2919065) | Cod sursa (job #1836885) | Cod sursa (job #2508866)
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int Max=100005;
const int Mmax=500005;
vector <int>v[Max],ans;
stack <int>s;
int n,m,viz[Mmax];
struct muchie
{
int x,y;
}muc[Mmax];
void citire()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y; in>>x>>y;
muc[i]={x,y};
v[x].push_back(i);
v[y].push_back(i);
}
}
int vereuler()
{
for(int i=1;i<=n;i++)
if(v[i].size()%2!=0)
return 0;
return 1;
}
void Euler()
{
s.push(1);
while(!s.empty())
{
int nod=s.top();
if(!v[nod].empty())
{
int m=v[nod].back();
v[nod].pop_back();
if(!viz[m])
{
viz[m]=1; int la;
if(muc[m].x!=nod)
la=muc[m].x;
else
la=muc[m].y;
s.push(la);
}
}
else
{
int q=s.top();
s.pop();
ans.push_back(q);
}
}
for(int i=0;i<ans.size()-1;i++)
out<<ans[i]<<" ";
}
int main()
{
citire();
if(vereuler()==0)
out<<"-1";
else
Euler();
return 0;
}