Pagini recente » Cod sursa (job #1814005) | Cod sursa (job #552421) | Cod sursa (job #1625759) | Cod sursa (job #2638844) | Cod sursa (job #2216296)
#include <cstdio>
#include <set>
#include <utility>
#include <vector>
#define NMAX 100000
#define MMAX 500000
static struct edge {
int v, n, p;
} edges[2*MMAX+1];
static int adj[NMAX+1], deleted[2*MMAX+1];
static std::vector<int> sol;
static int deg[NMAX+1];
static inline void ciclueuler(int v)
{
for (int i = adj[v]; i != 0; i = edges[i].n) {
if (!deleted[i]) {
deleted[i] = 1;
deleted[edges[i].p] = 1;
ciclueuler(edges[i].v);
}
}
sol.push_back(v);
}
int main()
{
int n, m, u, v, i;
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= m; i++) {
scanf("%d %d", &u, &v);
edges[2*i].v = v;
edges[2*i].n = adj[u];
edges[2*i].p = 2*i+1;
adj[u] = 2*i;
deg[u]++;
deg[v]++;
if (u != v) {
edges[2*i+1].v = u;
edges[2*i+1].n = adj[v];
edges[2*i+1].p = 2*i;
adj[v] = 2*i+1;
deg[u]++;
deg[v]++;
}
}
for (v = 1; v <= n; v++) {
if (deg[v] % 2) {
puts("-1");
return 0;
}
}
ciclueuler(1);
for (n = 0; n < sol.size() - 1; n++) {
printf("%d ", sol[n]);
}
return 0;
}