Pagini recente » Cod sursa (job #118877) | Cod sursa (job #2506688) | Cod sursa (job #1999082) | Cod sursa (job #1767695) | Cod sursa (job #814997)
Cod sursa(job #814997)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
inline int next_int() {
int d;
scanf("%d", &d);
return d;
}
const int V = 100000 + 1;
const int E = 500000 + 500000;
int deg[V], root[V], seen[E];
int ec, eb[V], en[E], ef[E], et[E];
vector<int> tour;
void add_edge(int u, int v) {
ef[ec] = u;
et[ec] = v;
en[ec] = eb[u];
eb[u] = ec++;
}
int find(int u) {
return (root[u] == u) ? (u) : (root[u] = find(root[u]));
}
void merge(int u, int v) {
root[find(u)] = find(v);
}
void find_euler_tour(int u) {
tour.push_back(u);
for (int e = eb[u]; e != -1; e = en[e]) {
if (seen[e] == false) {
seen[e ^ 0] = seen[e ^ 1] = true;
find_euler_tour(et[e]);
}
}
}
int main() {
int n = next_int();
int m = next_int();
for (int i = 1; i <= n; i++) {
root[i] = i;
eb[i] = -1;
}
for (int i = 0; i < m; i++) {
int u = next_int();
int v = next_int();
deg[u]++;
deg[v]++;
add_edge(u, v);
add_edge(v, u);
merge(u, v);
}
int ok = true;
for (int i = 1; i <= n; i++) {
if ((deg[i] & 1) || find(i) != find(1)) {
ok = false;
}
}
if (ok) {
find_euler_tour(1);
for (size_t i = 1; i < tour.size(); i++) {
printf("%d ", tour[i]);
}
} else {
printf("-1");
}
return 0;
}