Pagini recente » Cod sursa (job #1847414) | Cod sursa (job #1562588) | Cod sursa (job #658095) | Cod sursa (job #582934) | Cod sursa (job #399677)
Cod sursa(job #399677)
#include <cstdio>
#include <vector>
#include <list>
using namespace std;
#define Nmax 100010
list <int> S, V[Nmax];
list <int>::iterator it, it2;
int n, m, i, x, y;
int viz[Nmax], grad[Nmax];
void dfs (int nod) {
viz[nod] = 1;
for (list <int>::iterator it = V[nod].begin (); it != V[nod].end (); it++)
if (!viz[ *it ])
dfs ( *it );
}
int conex () {
dfs (1);
for (int i = 1; i <= n; i++)
if (!viz[i]) return 0;
return 1;
}
int grad_par () {
for (int i = 1; i <= n; i++)
if ( (grad[i]&1) == 1 ) return 0;
return 1;
}
void sterge (int x, int y) {
for (list <int>::iterator it = V[x].begin (); it != V[x].end (); it++)
if (*it == y) {
V[x].erase (it);
return ;
}
}
void parc (int nod) {
int v = nod, fiu;
do {
fiu = V[v].front ();
V[v].pop_front ();
sterge (fiu, v);
S.insert (it2, fiu);
v = fiu;
} while (v != nod);
}
void euler () {
S.push_back (1);
int nod;
for (it = S.begin (); it != S.end (); it++) {
nod = *it;
if (V[nod].begin() != V[nod].end() ) {
it2 = it; it2++;
parc (nod);
}
}
S.pop_back ();
for (it = S.begin (); it != S.end (); it++)
printf ("%d ", *it);
}
int main () {
freopen ("ciclueuler.in", "r", stdin);
freopen ("ciclueuler.out", "w", stdout);
scanf ("%d %d", &n, &m);
for (i = 1; i <= m; i++) {
scanf ("%d %d", &x, &y);
V[x].push_back (y); V[y].push_back (x);
grad[x]++; grad[y]++;
}
if (!conex () || !grad_par()) {
printf ("%d", -1);
return 0;
}
euler ();
return 0;
}