Pagini recente » Cod sursa (job #1678364) | Cod sursa (job #1586194) | Cod sursa (job #58023) | Cod sursa (job #1405256) | Cod sursa (job #1802081)
#include <cstdio>
#define MAXN 100000
#define MAXM 500000
int a, n, r, m, k, gr[MAXN+1], lista[MAXN+1], val[MAXM*2+1], nxt[MAXM*2+1], from[MAXM+1], to[MAXM+1], st[MAXM+1], ans[MAXM+1];
bool used[MAXM+1];
inline void adauga(int x, int y)
{
val[++r] = y;
nxt[r] = lista[x];
lista[x] = r;
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int i, x, y, nod, mc, p;
scanf("%d%d", &n, &m);
for(i=1; i<=m; ++i)
{
scanf("%d%d", &x, &y);
adauga(x, i);
adauga(y, i);
from[i] = x;
to[i] = y;
gr[x]++;
gr[y]++;
}
for(i=1; i<=n; ++i){
if(gr[i] & 1)
{
printf("-1");
return 0;
}
}
st[++k] = 1;
while(k)
{
nod = st[k];
p = lista[nod];
if(p)
{
mc = val[p];
lista[nod] = nxt[p];
if(!used[mc])
{
used[mc] = 1;
if(from[mc] == nod)
st[++k] = to[mc];
else st[++k] = from[mc];
}
}
else
{
ans[++a] = nod;
k--;
}
}
for(i=1; i<=a; ++i)
printf("%d ", ans[i]);
return 0;
}