Pagini recente » Cod sursa (job #2918154) | Cod sursa (job #200102) | Cod sursa (job #1799490) | Cod sursa (job #2396130) | Cod sursa (job #1245566)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <list>
#define N 100005
using namespace std;
list<int> g[N];
int n,m,v[N];
void read()
{
int a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d",&a,&b);
g[a].push_back(b);
g[b].push_back(a);
}
}
void bfs(int k)
{
queue<int> q;
v[k]=1;
q.push(k);
while(!q.empty())
{
k=q.front();
q.pop();
for(list<int>::iterator it=g[k].begin();it!=g[k].end();++it)
if(!v[*it])
{
v[*it]=1;
q.push(*it);
}
}
}
bool is_eulerian()
{
bfs(1);
for(int i=1;i<=n;++i)
if(g[i].size()%2||!v[i])
return 0;
return 1;
}
void solve()
{
if(!is_eulerian())
printf("-1\n");
else
{
stack<int> s;
int k=1,kv,ki;
s.push(k);
ki=1;
while(!s.empty())
{
k=s.top();
s.pop();
printf("%d ",k);
if(!g[k].empty())
{
kv=g[k].front();
s.push(kv);
g[k].pop_front();
if(kv==ki)
{
kv=g[k].front();
s.pop();
s.push(kv);
g[k].pop_front();
ki=kv;
}
for(list<int>::iterator it=g[kv].begin();it!=g[kv].end();++it)
if(*it==k)
{
g[kv].erase(it);
break;
}
}
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
read();
solve();
printf("\n");
return 0;
}