Pagini recente » Cod sursa (job #941880) | Cod sursa (job #1234624) | Cod sursa (job #430189) | Cod sursa (job #2401313) | Cod sursa (job #2216303)
#include <stdio.h>
#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], sol[MMAX+1], nsol;
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[nsol++] = 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 (i = 0; i < nsol - 1; i++) {
printf("%d ", sol[i]);
}
return 0;
}