Pagini recente » Cod sursa (job #192640) | Cod sursa (job #3189372) | Cod sursa (job #2166314) | Cod sursa (job #170189) | Cod sursa (job #2350412)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
const int NMAX = 1e5 + 5;
const int MMAX = 5e5 + 5;
vector < pair<int, int> > G[NMAX];
int n, m;
int deg[NMAX];
int viz[NMAX];
bool luat[MMAX];
void dfsCheck(int nod)
{
viz[nod] = 1;
for (auto v: G[nod])
if (!viz[v.first])
dfsCheck(v.first);
}
int main()
{
fi >> n >> m;
for (int i = 1; i <= m; i++)
{
int u, v;
fi >> u >> v;
G[u].push_back({v, i});
G[v].push_back({u, i});
deg[u]++;
deg[v]++;
}
bool euler = 1;
dfsCheck(1);
for (int i = 1; i <= n; i++)
if (!viz[i])
euler = 0;
for (int i = 1; i <= n; i++)
if (deg[i] % 2 == 1)
euler = 0;
if (!euler)
{
fo << -1;
return 0;
}
int nod = 1, distrus = 0;
while (distrus < m - 1)
{
fo << nod << " ";
int nxt = -1, much;
for (auto v: G[nod])
{
if (!luat[v.second] && deg[v.first] > 1)
nxt = v.first, much = v.second;
}
distrus++;
nod = nxt;
luat[much] = 1;
}
fo << nod << " ";
return 0;
}