Pagini recente » Cod sursa (job #1285736) | Cod sursa (job #1295742) | Cod sursa (job #2085134) | Noul site infoarena | Cod sursa (job #640469)
Cod sursa(job #640469)
#include <cstdio>
#include <list>
#include <queue>
#include <stack>
#define N 100001
using namespace std;
int n, m, gr[N];
bool viz[N];
list <int> g[N], sol;
queue <int> q;
stack <int> s;
void citire()
{
scanf ("%d %d ", &n, &m);
while (m --)
{
int x, y;
scanf ("%d %d ", &x, &y);
g[x].push_back (y);
g[y].push_back (x);
++ gr[x]; ++ gr[y];
}
}
bool grade()
{
for (int i = 1; i <= n; ++ i)
if (gr[i] % 2 != 0)
return 0;
return 1;
}
void bfs(int v)
{
q.push (v);
viz[v] = 1;
while (!q.empty())
{
v = q.front();
q.pop();
for (typeof (g[v].begin()) it = g[v].begin(); it != g[v].end(); ++ it)
if (viz[*it] == 0)
{
q.push (*it);
viz[*it] = 1;
}
}
}
bool conex()
{
bfs (1);
for (int i = 2; i <= n; ++ i)
if (!viz[i])
return 0;
return 1;
}
void sterge(int x, int y)
{
-- gr[x]; -- gr[y];
g[x].pop_front();
for (typeof (g[y].begin()) it = g[y].begin(); it != g[y].end(); ++ it)
if (*it == x)
{
g[y].erase (it);
break;
}
}
void euler(int v)
{
while (!g[v].empty())
{
int w = g[v].front();
s.push (v);
sterge (v, w);
v = w;
}
}
void afisare()
{
int v = 1;
do
{
euler (v);
v = s.top(); s.pop();
sol.push_front (v);
}
while (!s.empty());
for (typeof (sol.begin()) it = sol.begin(); it != sol.end(); ++ it)
printf ("%d ", *it);
printf ("\n");
}
int main()
{
freopen ("ciclueuler.in", "r", stdin);
freopen ("ciclueuler.out", "w", stdout);
citire();
if (!conex() && !grade())
printf ("-1\n");
else
afisare();
return 0;
}