Pagini recente » Cod sursa (job #1405258) | Cod sursa (job #401405) | Cod sursa (job #1889677) | Cod sursa (job #79190) | Cod sursa (job #2438350)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector < int > E[100005], Ciclu_Euler;
stack < int > st;
vector < pair < int, int > > ED(500005);
bool visited[500005];
int n, m;
int main()
{
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
E[x].push_back(i);
E[y].push_back(i);
ED[i] = {x, y};
}
for (int i = 1; i <= n; i++) if (E[i].size() & 1) return cout << "-1", 0;
st.push(1);
while (!st.empty())
{
int node = st.top();
if (E[node].size())
{
int muchie = E[node].back();
E[node].pop_back();
if (!visited[muchie])
{
visited[muchie] = true;
int x = ED[muchie].first;
int y = ED[muchie].second;
if (node == y) swap(x, y);
st.push(y);
}
}
else
{
Ciclu_Euler.push_back(node);
st.pop();
}
}
Ciclu_Euler.pop_back();
for (auto it : Ciclu_Euler) cout << it << " ";
return 0;
}