Pagini recente » Cod sursa (job #2562280) | Cod sursa (job #2359892) | Cod sursa (job #2766518) | Cod sursa (job #409816) | Cod sursa (job #447546)
Cod sursa(job #447546)
#include <cstdio>
#include <vector>
#include <stack>
#define nmax 100005
#define mmax 500005
#define pb push_back
using namespace std;
vector <int> :: iterator it;
int n, m, a, b, i, ok, L, sol [mmax], frt, node;
vector <int> G [nmax];
stack <int> stv;
int main () {
freopen ("ciclueuler.in", "r", stdin);
freopen ("ciclueuler.out", "w", stdout);
scanf ("%d%d\n", &n, &m);
for (i = 1; i <= m; i++) {
scanf ("%d%d\n", &a, &b);
G [a].pb (b);
G [b].pb (a);
}
for (i = 1; i <= n; i++)
if (G [i].size () & 1) {
printf ("-1\n");
return 0;
}
stv.push (1);
while (stv.size () > 0) {
frt = stv.top ();
if (G [frt].size ()) {
node = G [frt].back ();
G [frt].pop_back ();
for (it = G [node].begin (); it != G [node].end (); it++)
if (*it == frt) {
stv.push (node);
G [node].erase (it);
break;
}
} else {
sol [++L] = stv.top ();
stv.pop ();
}
}
for (i = 1; i <= L; i++)
printf ("%d ", sol [i]);
return 0;
}