Pagini recente » Cod sursa (job #1037165) | Cod sursa (job #1885128) | Cod sursa (job #124499) | Cod sursa (job #273219) | Cod sursa (job #1885500)
#include <bits/stdc++.h>
using namespace std;
const int N=100005;
int grad[N],viz[N];
vector <int> G[N];
vector <int> sol;
void dfs(int x){
viz[x]=1;
for(int i=0;i<(int)G[x].size();i++){
int y=G[x][i];
if(viz[y]==0) dfs(y);
}
}
void euler(int x){
while(G[x].size()){
int y=G[x].back();
G[x].pop_back();
G[y].erase(find(G[y].begin(),G[y].end(),x));
euler(y);
}
sol.push_back(x);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
int n,m,a,b,i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
grad[a]++, grad[b]++;
}
for(i=1;i<=n;i++)
if(grad[i]%2){
printf("-1\n");
return 0;
}
dfs(1);
for(i=1;i<=n;i++)
if(!viz[i]){
printf("-1\n");
return 0;
}
euler(1);
while(sol.size()>1){
printf("%d ",sol.back());
sol.pop_back();
}
sol.pop_back();
printf("\n");
return 0;
}