Pagini recente » Monitorul de evaluare | Cod sursa (job #2793340) | Cod sursa (job #2410195) | Cod sursa (job #335239) | Cod sursa (job #1245571)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <list>
#define N 100005
using namespace std;
FILE *f=fopen("ciclueuler.in","r"),*gg=fopen("ciclueuler.out","w");
list<int> g[N];
int n,m,v[N];
void read()
{
int a,b;
fscanf(f,"%d%d",&n,&m);
//scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d",&a,&b);
//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())
fprintf(gg,"-1");
else
{
stack<int> s;
int k=1,kv,ki;
s.push(k);
ki=1;
while(!s.empty())
{
k=s.top();
s.pop();
fprintf(gg,"%d ",k);
//printf("%d ",k);
//cout<<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");
fclose(f);
fclose(gg);
return 0;
}