Pagini recente » Cod sursa (job #1233732) | Cod sursa (job #1202444) | Cod sursa (job #2747432) | Cod sursa (job #516019) | Cod sursa (job #1488797)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100005;
const int Mmax = 500005;
vector < vector <int> > graf;
int n, m, grad[Mmax];
vector <int> sol;
bitset <Nmax> viz;
void euler(int start)
{
vector <int> stiva;
int nod, b;
stiva.clear();
stiva.push_back(start);
while (!stiva.empty())
{
nod = stiva.back();
if (graf[nod].empty())
{
stiva.pop_back();
sol.push_back(nod);
continue;
}
b = graf[nod].back();
graf[nod].pop_back();
stiva.push_back(b);
for (vector <int>::iterator it = graf[b].begin(); it != graf[b].end(); it++)
if (*it == nod) {graf[b].erase(it); break;}
}
}
void dfs(int nod)
{
viz[nod] = true;
for (const auto &it : graf[nod])
if (!viz[it])
dfs(it);
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &n, &m);
graf.resize(n + 2);
for (int i = 1, a, b; i <= m; i++)
{
scanf("%d %d", &a, &b);
graf[a].push_back(b);
graf[b].push_back(a);
grad[a]++;
grad[b]++;
}
dfs(1);
for (int i = 1; i <= n; i++)
if (!viz[i] || (grad[i] & 1))
{
printf("-1");
return 0;
}
euler(1);
sol.pop_back();
for (const auto &it : sol)
printf("%d ", it);
return 0;
}