Pagini recente » Cod sursa (job #2110205) | Cod sursa (job #827016) | Cod sursa (job #3277358) | Cod sursa (job #2307383) | Cod sursa (job #2350009)
#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];
bool viz[NMAX];
int deg[NMAX];
int stiva[NMAX];
int k;
void dfsCheck(int nod)
{
viz[nod] = 1;
for (auto v: G[nod])
if (!viz[v.first])
dfsCheck(v.first);
}
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;
dfsCheck(1);
for (int i = 1; i <= n; i++)
if (!viz[i])
euler = 0;
if (!euler)
{
fprintf(fo, "-1");
return 0;
}
k = 0;
stiva[++k] = 1;
while (k > 0)
{
int nod = stiva[k];
bool da = 0;
for (auto v: G[nod])
{
if (ok[v.second])
{
ok[v.second] = 0;
stiva[++k] = v.first;
da = 1;
}
}
if (!da)
{
k--;
fprintf(fo, "%d ", nod);
}
}
return 0;
}