Pagini recente » Cod sursa (job #1291555) | Cod sursa (job #994411) | Cod sursa (job #2402111) | Cod sursa (job #773230) | Cod sursa (job #1855715)
#include <cstdio>
#include <algorithm>
#include <vector>
#define pii pair <int, int>
#define f first
#define s second
using namespace std;
vector <int> v[100010];
int grad[100010], st[500010], rez[500010];
bool ap[500010];
pii edge[500010];
int main ()
{
freopen ("ciclueuler.in", "r", stdin);
freopen ("ciclueuler.out", "w", stdout);
int n, m;
scanf ("%d %d", &n, &m);
for (int i = 1; i <= m; ++i)
{
int x, y;
scanf ("%d %d", &x, &y);
++grad[x];
++grad[y];
v[x].push_back (i);
v[y].push_back (i);
edge[i] = pii (x, y);
}
for (int i = 1; i <= n; ++i)
if (grad[i] & 1)
{
printf ("-1\n");
return 0;
}
int k = 0;
st[++k] = 1;
for (; k > 0;)
{
int nod = st[k];
//printf ("%d %d\n", k, nod);
if (!v[nod].size ())
{
rez[++rez[0]] = st[k--];
continue;
}
int x = v[nod].back ();
v[nod].pop_back ();
// printf ("%d %d %d\n", x, edge[x].f, edge[x].s);
if (ap[x]) continue;
ap[x] = true;
st[++k] = ((edge[x].f == nod) ? edge[x].s : edge[x].f);
}
for (int i = 1; i < rez[0]; ++i)
printf ("%d ", rez[i]);
printf ("\n");
return 0;
}