Pagini recente » Cod sursa (job #805851) | Cod sursa (job #2478401) | Cod sursa (job #2843623) | Cod sursa (job #2756385) | Cod sursa (job #2981303)
#include <bits/stdc++.h>
using namespace std;
string np = "ciclueuler";
ifstream f(np + ".in");
ofstream g(np + ".out");
// #define f cin
// #define g cout
int n, m;
vector<bool> viz(500003);
vector<pair<int, int>> adj[100003];
vector<int> rez;
stack<int> st;
int main()
{
f >> n >> m;
for (int i = 1, a, b; i <= m; i++)
f >> a >> b,
adj[a].emplace_back(b, i),
adj[b].emplace_back(a, i);
for (int i = 1; i <= n; i++)
if (adj[i].size() % 2 == 1)
{
g << -1;
return 0;
}
st.push(1);
while (!st.empty())
{
int nod = st.top();
if (adj[nod].empty())
rez.push_back(nod), st.pop();
else
{
if (viz[adj[nod].back().second])
adj[nod].pop_back();
else
{
auto next = adj[nod].back();
st.push(next.first);
viz[next.second] = 1;
adj[nod].pop_back();
}
}
}
if (rez.size() != m + 1)
g << -1;
else
{
rez.pop_back();
for (auto x : rez)
g << x << " ";
}
return 0;
}