Pagini recente » Cod sursa (job #1954716) | Cod sursa (job #1374075) | Cod sursa (job #3168342) | Cod sursa (job #1843424) | Cod sursa (job #1398083)
#include<stdio.h>
#include<vector>
using namespace std;
const int NMAX = 1e5 + 5, MMAX = 5e5 + 5;
int n, m;
pair <int, int> edge[MMAX];
vector <int>::iterator it[NMAX];
bool vis[MMAX];
vector <int> graph[NMAX];
vector <int> cycle;
int deg[NMAX];
int newNode;
void euler (int node) {
while(it[node] != graph[node].end()) {
if(vis[*it[node]]) {
++ it[node];
continue;
}
newNode = edge[*it[node]].first + edge[*it[node]].second - node;
vis[*it[node]] = 1;
++ it[node];
euler(newNode);
}
cycle.push_back(node);
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int i, a, b;
scanf("%d%d", &n, &m);
for(i = 1; i <= m; ++ i) {
scanf("%d%d", &a, &b);
edge[i] = make_pair(a, b);
graph[a].push_back(i);
graph[b].push_back(i);
++ deg[a];
++ deg[b];
}
for(i = 1; i <= n; ++ i)
if(deg[i] % 2 == 1) {
printf("-1\n");
return 0;
}
for(i = 1; i <= n; ++ i)
it[i] = graph[i].begin();
euler(1);
for(i = 1; i < cycle.size(); ++ i)
printf("%d ", cycle[i]);
return 0;
}