Pagini recente » Cod sursa (job #1633371) | Cod sursa (job #1055666) | Cod sursa (job #190874) | Cod sursa (job #2455739) | Cod sursa (job #391956)
Cod sursa(job #391956)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define x first
#define y second
#define pii pair<int, int>
#define forit(it, v) for(; it != v.end(); ++it)
const int MAX_N = 100010;
const int MAX_M = 500010;
int n, m, r, z;
pii a[MAX_M];
int g[MAX_N], q[MAX_M], sol[MAX_M], f[MAX_M];
vector <int> v[MAX_N];
vector <int>::iterator it[MAX_N];
int main()
{
int 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", &a[i].x, &a[i].y);
v[a[i].x].pb(i);
v[a[i].y].pb(i);
++g[a[i].x];
++g[a[i].y];
}
for (i = 1; i <= n; ++i)
if (g[i] & 1)
{
printf("-1\n");
return 0;
}
for (i = 1; i <= n; ++i)
it[i] = v[i].begin();
q[z = 1] = 1;
while (z)
{
int nod = q[z];
forit(it[nod], v[nod])
if (!f[*(it[nod])])
break;
if (it[nod] != v[nod].end())
{
f[*(it[nod])] = 1;
if (nod == a[*(it[nod])].x)
q[++z] = a[*(it[nod])].y;
else
q[++z] = a[*(it[nod])].x;
++it[nod];
continue;
}
sol[++r] = q[z--];
}
if (r <= m)
{
printf("-1\n");
return 0;
}
for (i = 1; i < r; ++i)
printf("%d ", sol[i]);
}