Pagini recente » Cod sursa (job #340384) | Cod sursa (job #394366) | Cod sursa (job #343316) | Istoria paginii runda/oji2004_11/clasament | Cod sursa (job #1505256)
#include <cstdio>
#include <cstring>
#include <vector>
#include <deque>
#include <algorithm>
#define mp make_pair
#define f first
#define s second
#define maxN 100002
using namespace std;
int n, i, j, m, ok, x, y;
deque < int > q;
vector < pair < int, int> > V[maxN];
bool used[maxN * 5];
void read()
{
freopen("ciclueuler.in", "r", stdin);
scanf("%d %d", &n, &m);
i = 0;
while (m --)
{
++ i;
scanf("%d %d", &x, &y);
V[x].push_back(mp(y, i));
V[y].push_back(mp(x, i));
}
}
void solve()
{
ok = 1;
for (i = 1;i <= n;++ i)
if (V[i].size() % 2)
{
ok = 0;
return ;
}
}
void write()
{
freopen("ciclueuler.out", "w", stdout);
if (!ok)
{
printf("-1");
return ;
}
q.push_back(1);
while (!q.empty())
{
x = q.front();
while (!V[x].empty() && used[V[x].back().s])
V[x].pop_back();
if (V[x].size() == 0)
{
q.pop_front();
printf("%d ", x);
}
else
{
y = V[x].back().f;
used[V[x].back().s] = 1;
V[x].pop_back();
q.push_front(y);
}
}
}
int main()
{
read();
solve();
write();
return 0;
}