Pagini recente » Cod sursa (job #40274) | Cod sursa (job #1721886) | Cod sursa (job #1622799) | Cod sursa (job #393627) | Cod sursa (job #652018)
Cod sursa(job #652018)
#include<cstdio>
#include<vector>
#define MAX 500001
using namespace std;
int viz[MAX],S[MAX],n,m,x,y,D[MAX],T[MAX];
vector <pair<int,int > >G[MAX];
void citire(){
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d",&x,&y);
G[x].push_back(make_pair(y,i));
G[y].push_back(make_pair(x,i));
D[x]++;
D[y]++;
}
}
void dfs(int x){
viz[x]=1;
for(int i=0; i<G[x].size();++i)
if(!viz[G[x][i].first])
dfs(G[x][i].first);
}
void euler (){
int k=0;
S[++k]=1;
while(k){
if(G[S[k]].empty()){
printf("%d ",S[k]);
--k;
}
else{
if(T[G[S[k]][G[S[k]].size()-1].second])
G[S[k]].pop_back();
else{
S[++k]=G[S[k-1]][G[S[k-1]].size()-1].first;
T[G[S[k-1]][G[S[k-1]].size()-1].second]=1;
}
}
}
}int main (){
citire();
dfs(1);
int check =0;
for(int i=1; i<=n;++i)
if((!viz[i]&&D[i])||(D[i]%2)){
check=1;
break;
}
if(!check)
euler();
else
printf("-1");
return 0;
}