Pagini recente » Cod sursa (job #1105165) | Cod sursa (job #453894) | Cod sursa (job #1318272) | Cod sursa (job #574099) | Cod sursa (job #1907102)
#include <bits/stdc++.h>
#define NMAX 100005
#define MMAX 500005
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
int from[MMAX], to[MMAX], n, m;
bitset < MMAX > used(false);
vector < int > a[NMAX], sol, st;
int main()
{
f>>n>>m;
int cycle = 0;
for (int x, y, i = 0; i < m; i++)
{
f>>x>>y;
from[i] = x;
to[i] = y;
a[x].push_back(i);
a[y].push_back(i);
if (x != y)
{
cycle += (a[x].size() % 2);
cycle -= !(a[x].size() % 2);
cycle += (a[y].size() % 2);
cycle -= !(a[y].size() % 2);
}
}
if (cycle != 0)
{
g<<-1;
return 0;
}
st.push_back(1);
while (!st.empty())
{
int x = st.back();
if (!a[x].empty())
{
int y = a[x].back();
a[x].pop_back();
if (!used[y])
{
used[y] = 1;
int t = from[y];
if (t == x)
t = to[y];
st.push_back(t);
}
} else {
st.pop_back();
sol.push_back(x);
}
}
for (int i = 0; i < sol.size() - 1; i++)
g<<sol[i]<<' ';
return 0;
}