Pagini recente » Cod sursa (job #2350001) | Cod sursa (job #2655463) | Cod sursa (job #1314923) | Cod sursa (job #406294) | Cod sursa (job #2102935)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int nx=100002;
int n,m,i,j;
vector < int > v[nx];
stack < int > st;
bitset < nx > viz;
vector < int > sol;
void dfs (int nod)
{
viz.set(nod);
for(vector < int > :: iterator it=v[nod].begin(); it!=v[nod].end(); it++)
if(viz.test(*it)==false)
dfs(*it);
}
void euler ()
{
st.push(1);
while(!st.empty())
{
int nod=st.top();
if(v[nod].size())
{
int nod1=v[nod].back();
v[nod].pop_back();
v[nod1].erase(find(v[nod1].begin(),v[nod1].end(),nod));
st.push(nod1);
}
else
{
st.pop();
sol.push_back(nod);
}
}
}
int main()
{
in>>n>>m;
for(; m; m--)
{
in>>i>>j;
v[i].push_back(j);
v[j].push_back(i);
}
dfs(1);
for(int i=1; i<=n; i++)
if(v[i].size()%2 || viz.test(i)==false)
{
out<<-1;
return 0;
}
euler();
for(vector < int > :: iterator it=sol.begin(); it!=sol.end(); it++)
out<<*it<<' ';
return 0;
}