Pagini recente » Cod sursa (job #1421519) | Cod sursa (job #2713479) | Cod sursa (job #1399105) | Cod sursa (job #2663442) | Cod sursa (job #2352096)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 5;
const int MMAX = 5e5 + 5;
int n, m;
vector < pair<int, int> > G[NMAX];
bool ok[MMAX];
int deg[NMAX];
int st, dr;
int main()
{
FILE *fi, *fo;
fi = fopen("ciclueuler.in", "r");
fo = fopen("ciclueuler.out", "w");
fscanf(fi, "%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int u, v;
fscanf(fi, "%d%d", &u, &v);
G[u].push_back({v, i});
G[v].push_back({u, i});
ok[i] = 1;
deg[u]++;
deg[v]++;
}
bool euler = 1;
for (int i = 1; i <= n; i++)
if (deg[i] % 2 == 1)
euler = 0;
if (!euler)
{
fprintf(fo, "-1");
return 0;
}
vector <int> s;
vector <int> rez;
s.push_back(1);
while (!s.empty())
{
int nod = s.back();
if (!G[nod].empty())
{
pair <int, int> v = G[nod].back();
G[nod].pop_back();
int vec = v.first, much = v.second;
if (!ok[much])
{
continue;
}
ok[much] = 0;
s.push_back(vec);
}
else
{
s.pop_back();
rez.push_back(nod);
}
}
rez.pop_back();
if (rez.size() != m) // neconex
{
fprintf(fo, "-1");
return 0;
}
for (auto x: rez)
fprintf(fo, "%d ", x);
return 0;
}