Pagini recente » Cod sursa (job #3206435) | Cod sursa (job #2949305) | Cod sursa (job #306639) | Cod sursa (job #2690069) | Cod sursa (job #1556602)
#include <cstdio>
#include <list>
#define nmax 100005
#include <stack>
#include <queue>
using namespace std;
int N,M,d[nmax];
bool viz[nmax];
list <int> G[nmax],R;
stack <int> S;
queue <int> Q;
void read(){
scanf("%d %d ",&N,&M);
int x,y;
while(M--){
scanf("%d %d ",&x,&y);
G[x].push_back(y);d[x]++;
G[y].push_back(x);d[y]++;
}
}
void BFS(){
viz[1] = true;
int x;
Q.push(1);
while(!Q.empty()){
x = Q.front();
Q.pop();
for(list <int> :: iterator it = G[x].begin();it != G[x].end();++it)
if(viz[*it] == false){
Q.push(*it);
viz[*it] = true;
}
}
}
void Rezolvare(){
int i,j;
BFS();
for(i = 1;i <= N;++i)
if(viz[i]==false || d[i]%2==1){printf("-1\n");return;}
i = 1;
do{
while(!G[i].empty()){
j = G[i].front();
G[i].pop_front();
for(list <int> :: iterator it = G[j].begin();it != G[j].end();++it)
if(*it == i){
G[j].erase(it);
break;
}
S.push(i);
i = j;
}
i = S.top();
S.pop();
R.push_back(i);
}while(!S.empty());
for(list <int> :: iterator it = R.begin();it != R.end();++it)printf("%d ",*it);
printf("\n");
}
int main(){
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
read();
Rezolvare();
return 0;
}