Pagini recente » Cod sursa (job #927003) | Cod sursa (job #265913) | Cod sursa (job #2708509) | Cod sursa (job #217962) | Cod sursa (job #3122782)
#include <bits/stdc++.h>
using namespace std;
const int N = 500500;
const int M = 500500;
struct muchie {
int u, v;
} e[M];
bool sterse[M];
int n, m, prim[N];
vector<int> g[N];
vector<int> ciclu_eulerian;
bool tt_grade_pare() {
for(int i = 1; i <= n; i++)
if(g[i].size() & 1)
return false;
return true;
}
inline int celalalt_varf(muchie edge, int un_varf) { return (edge.u + edge.v - un_varf); }
void euler(int u) {
while(prim[u] < g[u].size()) {
int current_edge_index = g[u][prim[u]++];
muchie edge = e[current_edge_index];
if(!sterse[current_edge_index]) {
sterse[current_edge_index] = true;
euler(celalalt_varf(edge, u));
}
}
ciclu_eulerian.push_back(u);
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++) {
scanf("%d%d", &e[i].u, &e[i].v);
g[e[i].u].push_back(i);
g[e[i].v].push_back(i);
}
if(!tt_grade_pare()) {
printf("-1\n");
exit(0);
}
euler(1);
if(ciclu_eulerian.size() != m + 1) {
printf("-1\n");
exit(0);
}
for(int i = 0; i < ciclu_eulerian.size() - 1; i++)
printf("%d ", ciclu_eulerian[i]);
}