Pagini recente » Cod sursa (job #190205) | Cod sursa (job #809858) | Cod sursa (job #2503565) | Cod sursa (job #1658657) | Cod sursa (job #2156624)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
const int kMaxN = 1e5, kMaxM = 5e5;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct Edge {
int x, y;
} edge[kMaxM];
int idx[kMaxN + 1], edge_idx[2 * kMaxM];
bool used_edge[kMaxM];
void Df(const int node) {
for (int iter = idx[node]; iter != idx[node + 1]; ++iter) {
const int e = edge_idx[iter];
if (used_edge[e]) {
continue;
}
used_edge[e] = true;
Df(edge[e].x ^ edge[e].y ^ node);
cout << node + 1 << ' ';
}
}
int main() {
int n, m; cin >> n >> m;
for (int i = 0; i < m; ++i) {
int x, y; cin >> x >> y; --x; --y;
edge[i] = {x, y};
}
for (int i = 0; i < m; ++i) {
++idx[edge[i].x];
++idx[edge[i].y];
}
for (int i = 1; i <= n; ++i) {
idx[i] += idx[i - 1];
}
for (int i = 0; i < m; ++i) {
edge_idx[--idx[edge[i].x]] = i;
edge_idx[--idx[edge[i].y]] = i;
}
for (int i = 0; i < n; ++i) {
if (idx[i + 1] % 2 != idx[i] % 2) {
cout << -1 << endl;
return 0;
}
}
Df(0);
}