Pagini recente » Cod sursa (job #768598) | Cod sursa (job #2229274) | Cod sursa (job #3127444) | Cod sursa (job #1952506) | Cod sursa (job #1506246)
#include <stdio.h>
#include <vector>
#include <list>
#include <bitset>
#define NMAX 100005
using namespace std;
vector <int> G[NMAX];
list <int> L;
bitset <NMAX> viz;
int N, M, grad[NMAX];
void dfs(int nod){
viz[nod] = 1;
for(vector <int> :: iterator it = G[nod].begin(); it != G[nod].end(); ++it)
if(!viz[*it])
dfs(*it);
}
int main(){
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int x, y, ok = 1, nod;
scanf("%d %d", &N, &M);
for(int i = 1; i <= M; ++i){
scanf("%d %d", &x, &y);
G[x].push_back(y);
G[y].push_back(x);
++grad[x];
++grad[y];
}
dfs(1);
for(int i = 1; i <= N; ++i){
if(!viz[i]){
printf("-1\n");
ok = 0;
break;
}
if(grad[i] % 2){
printf("-1\n");
ok = 0;
break;
}
}
if(ok){
L.push_back(1);
while(!L.empty()){
nod = L.front();
if(G[nod].empty()){
printf("%d ", nod);
L.pop_front();
}else{
int i = G[nod].back();
L.push_front(i);
G[nod].pop_back();
for(vector <int> :: iterator it = G[i].begin(); it != G[i].end(); ++it)
if(*it == nod){
G[i].erase(it);
break;
}
}
}
}
return 0;
}