Pagini recente » Cod sursa (job #2818497) | Cod sursa (job #2751102) | Cod sursa (job #1865171) | Cod sursa (job #234176) | Cod sursa (job #2864345)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MAXn=1e5+5;
const int MAXm=5e5+5;
int n,m,used[MAXm],from[MAXm],to[MAXm],a,b;
vector < int > st,sol,v[MAXn];
int main()
{
fin >> n >> m;
for(int i=1;i<=m;i++)
{
fin >> a >> b;
v[a].push_back(i);
v[b].push_back(i);
from[i]=a;
to[i]=b;
}
/// nu se mai verifica conexitatea
for(int i=1;i<=n;i++)
if(v[i].size()%2) /// verifica daca gradul e 2
{
fout << -1;
return 0;
}
st.push_back(1);
while(!st.empty())
{
int nod=st.back();
if(!v[nod].empty())
{
int mch=v[nod].back();
v[nod].pop_back();
if(!used[mch])
{
used[mch]=1;
int to=::to[mch]^::from[mch]^nod;
st.push_back(to);
}
}
else
{
st.pop_back();
sol.push_back(nod);
}
}
for(int i=0;i<sol.size()-1;i++)
fout << sol[i] << " ";
return 0;
}