Pagini recente » Cod sursa (job #2154149) | Cod sursa (job #1166668) | Cod sursa (job #3243532) | Cod sursa (job #991927) | Cod sursa (job #728832)
Cod sursa(job #728832)
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#define N 100005
using namespace std;
vector <int> G[N];
vector <int>::iterator it;
queue <int> C;
stack <int> S;
bool viz[N];
int grad[N],n,k,sol[5*N];
void read()
{ int m,x,y;
freopen("ciclueuler.in","r",stdin); scanf("%d %d\n",&n,&m);
for(;m>=1;--m)
{
scanf("%d %d\n",&x,&y);
++grad[x]; ++grad[y];
G[x].push_back(y);
G[y].push_back(x);
}
fclose(stdin);
}
int admite_ciclu()
{ int x,i;
viz[1]=1; C.push(1);
while(!C.empty())
{
x=C.front(); C.pop();
for(it=G[x].begin();it!=G[x].end();++it)
if(viz[*it]==0){ C.push(*it); viz[*it]=1; }
}
for(i=1;i<=n;++i)
if(viz[i]==0||grad[i]%2==1)return 0;
return 1;
}
void solve()
{ int v,w,i;
bool e;
if(!admite_ciclu())printf("-1");
else{
v=1;
do
{
while(!G[v].empty())
{
it=G[v].begin();
w=*it;
G[v].erase(it);
e=false;
for(it=G[w].begin();it!=G[w].end()&&!e;++it)
if(*it==v){ G[w].erase(it); e=true; }
S.push(v);
v=w;
}
v=S.top(); S.pop();
sol[++k]=v;
}
while(!S.empty());
}
for(i=k;i>=1;--i)
printf("%d ",sol[i]);
}
int main()
{
k=0;
read();
freopen("ciclueuler.out","w",stdout);
solve();
fclose(stdout);
return 0;
}