Pagini recente » Cod sursa (job #3000670) | Cod sursa (job #685273) | Cod sursa (job #1444916) | Cod sursa (job #341984) | Cod sursa (job #634357)
Cod sursa(job #634357)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 100010
#define MMAX 500010
int n, m, L, nr;
vector<int> A[NMAX];
int G[NMAX], w[NMAX];
int X[MMAX], Y[MMAX];
int S[MMAX], res[MMAX];
char vis[MMAX];
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int i, node;
scanf("%d %d", &n, &m);
for (i=1; i<=m; ++i) {
scanf("%d %d", &X[i], &Y[i]);
A[X[i]].push_back(i);
A[Y[i]].push_back(i);
}
for (i=1; i<=n; ++i)
G[i] = A[i].size();
for (i=1; i<=n; ++i)
if (G[i] & 1) {
printf("-1\n");
return 0;
}
L = 1;
S[L] = 1;
while (L > 0) {
node = S[L];
for ( ; w[node] < G[node] && vis[A[node][w[node]]]; w[node]++);
if (w[node] < G[node]) {
vis[A[node][w[node]]] = 1;
if (node == X[A[node][w[node]]])
S[++L] = Y[A[node][w[node]]];
else
S[++L] = X[A[node][w[node]]];
++w[node];
continue;
}
res[++nr] = S[L--];
}
if (nr <= m) {
printf("-1\n");
return 0;
}
for (i=1; i<nr; ++i)
printf("%d ", res[i]);
printf("\n");
return 0;
}