Pagini recente » Cod sursa (job #1191298) | Cod sursa (job #887569) | Cod sursa (job #642745) | Cod sursa (job #1290302) | Cod sursa (job #1650765)
#include <iostream>
#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
#include <stack>
#include <bitset>
#define nmax 100001
using namespace std;
stack<int> s;
vector<int> m[nmax];
queue<int> q;
bitset<nmax> viz;
int n,m1;
inline bool is_euler()
{
int nrd=1,nod;
q.push(1); viz[1]=1;
while(!q.empty())
{
nod=q.front(); q.pop();
if(m[nod].size()%2==1) return 0;
else
for(vector<int>::iterator it=m[nod].begin();it!=m[nod].end();it++)
if(!viz[*it])
{
nrd++;
q.push(*it);
viz[*it]=1;
}
}
if(nrd!=n) return 0;
return 1;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m1);
int i,x,y,nod,aux;
for(i=1;i<=m1;i++)
{
scanf("%d %d",&x,&y);
m[x].push_back(y);
m[y].push_back(x);
}
if(!is_euler()) { printf("-1\n"); return 0; }
s.push(1);
while(!s.empty())
{
nod=s.top();
if(m[nod].size())
{
aux=m[nod].back();
m[nod].pop_back();
m[aux].erase( find(m[aux].begin(),m[aux].end(),nod));
s.push(aux);
}
else
{
if(s.size()>1) printf("%d ",nod);
s.pop();
}
}
return 0;
}