Pagini recente » Cod sursa (job #796162) | Cod sursa (job #768282) | Cod sursa (job #840697) | Cod sursa (job #2588560) | Cod sursa (job #1376240)
#include <cstring>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int N, M;
int E1[500002], E2[500002];
int D[100002];
vector<int> V[100002];
bool S[500002];
int rem[100002];
int ST[500002], R[500002];
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
fin >> N >> M;
for (int i = 1; i <= M; ++i)
{
fin >> E1[i] >> E2[i];
V[E1[i]].push_back(i);
V[E2[i]].push_back(i);
++D[E1[i]];
++D[E2[i]];
}
for (int i = 1; i <= N; ++i)
if (D[i] % 2 != 0)
{
fout << -1 << '\n';
fin.close();
fout.close();
return 0;
}
ST[++ST[0]] = 1;
while (ST[0])
{
int now = ST[ST[0]];
bool any = false;
for (; rem[now] < int(V[now].size()); ++rem[now])
if (!S[V[now][rem[now]]])
{
any = true;
S[V[now][rem[now]]] = true;
if (E1[V[now][rem[now]]] == now)
ST[++ST[0]] = E2[V[now][rem[now]]];
else
ST[++ST[0]] = E1[V[now][rem[now]]];
++rem[now];
break;
}
if (!any)
{
R[++R[0]] = now;
--ST[0];
}
}
if (R[0] != M + 1)
fout << -1 << '\n';
else
{
for (int i = 1; i <= M; ++i)
fout << R[i] << ' ';
fout << '\n';
}
fin.close();
fout.close();
}