Pagini recente » Cod sursa (job #2797768) | Cod sursa (job #102056) | Cod sursa (job #843556) | Cod sursa (job #1321256) | Cod sursa (job #1640883)
#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;
int is_euler()
{
int nod;
vector<int>::iterator it;
if(m[1].size()%2==1) return 0;
q.push(1); viz[1]=1;
int nrvf=1;
while(!q.empty())
{
nod=q.front(); q.pop();
for(it=m[nod].begin();it!=m[nod].end();it++)
{
if(m[*it].size()%2==1) { return 0; break; }
if(!viz[*it]) { viz[*it]=1; nrvf++; q.push(*it); }
}
}
if(nrvf==n) return 1;
else return 0;
}
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())
{
s.pop();
if(!s.empty())
printf("%d ",nod);
}
else
{
aux=m[nod].back();
m[nod].pop_back();
m[aux].erase(find(m[aux].begin(),m[aux].end(),nod));
s.push(aux);
}
}
return 0;
}