Pagini recente » Cod sursa (job #2937743) | Cod sursa (job #803844) | Cod sursa (job #278525) | Cod sursa (job #352791) | Cod sursa (job #1127961)
/*
Keep It Simple!
*/
#include<stdio.h>
#include<list>
#define MaxN 100005
#define inf 255000000
using namespace std;
list<int> G[MaxN],Queue;
int n,m,E[MaxN*6],nrE;
bool viz[MaxN];
void DFS(int node)
{
viz[node] = 1;
for(list<int>::iterator it = G[node].begin(); it!=G[node].end();it++)
if(!viz[*it])
DFS(*it);
}
int E_Euler()
{
for(int i=1;i<=n;i++)
if(G[i].size()%2)
return 0;
DFS(1);
for(int i=1;i<=n;i++)
if(viz[i] == 0)
return 0;
return 1;
}
int sw;
void Ciclu_Euler(int node)
{
while(G[node].size())
{
int aux = G[node].front();
G[node].pop_front();
sw = 0;
for(list<int>::iterator it = G[aux].begin();it!=G[aux].end() && sw == 0;it++)
if( *it == node )
{
G[aux].erase(it); sw = 1;
}
Ciclu_Euler(aux);
}
E[++nrE] = node;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
int x,y;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
if(E_Euler())
{
Ciclu_Euler(1);
for(int i=nrE;i>1;i--)
printf("%d ",E[i]);
}
else
printf("-1");
}