Pagini recente » Cod sursa (job #2975423) | Cod sursa (job #2117722) | Cod sursa (job #465663) | Cod sursa (job #118443) | Cod sursa (job #1935309)
#include <stdio.h>
#include <stdlib.h>
int V1[500000];
int V2[500000];
int Used[500000];
int S[500001];
int sn;
int Q[500001];
int qn;
int *E[100000];
int N[100000];
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int n, m;
scanf("%i%i", &n, &m);
int i;
for (i = 0; i < m; ++i) {
int v1, v2;
scanf("%i%i", &v1, &v2);
v1--;
v2--;
V1[i] = v1;
V2[i] = v2;
E[v1] = realloc(E[v1], (N[v1] + 1) * sizeof(int));
E[v1][N[v1]++] = i;
E[v2] = realloc(E[v2], (N[v2] + 1) * sizeof(int));
E[v2][N[v2]++] = i;
}
for (i = 0; i < n; ++i) {
if (N[i] % 2) {
printf("-1\n");
goto bye;
}
}
S[sn++] = 0;
while (sn) {
int v1 = S[sn - 1];
if (N[v1]) {
i = E[v1][N[v1] - 1];
N[v1]--;
if (Used[i]) continue;
Used[i] = 1;
int v2 = (V1[i] == v1) ? (V2[i]) : (V1[i]);
S[sn++] = v2;
}
else {
sn--;
Q[qn++] = v1;
}
}
for (i = 0; i < qn - 1; ++i) {
if (i) printf(" ");
printf("%i", Q[i] + 1);
}
printf("\n");
bye:
return 0;
}