Pagini recente » Cod sursa (job #2628146) | Cod sursa (job #1891035) | Cod sursa (job #533484) | Cod sursa (job #1878524) | Cod sursa (job #2864821)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
int n, m, from[500001], to[500001];
bool ver[500001];
vector < int > v[100001], r;
stack < int > st;
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y;
fin >> x >> y;
from[i] = x;
to[i] = y;
v[x].push_back (i);
v[y].push_back (i);
}
for (int i = 1; i <= n; i++)
if (v[i].size () % 2 == 1) {
fout << -1;
return 0;
}
st.push (1);
while (not st.empty ()) {
int nc = st.top ();
if (v[nc].size ()) {
int mc = v[nc].back ();
v[nc].pop_back ();
if (not ver[mc]) {
ver[mc] = true;
int nv = (nc ^ from[mc] ^ to[mc]);
st.push (nv);
}
}
else {
r.push_back (nc);
st.pop ();
}
}
r.pop_back ();
for (int i = 0; i < r.size (); i++)
fout << r[i] << ' ';
return 0;
}