Pagini recente » Cod sursa (job #2305530) | Cod sursa (job #92982) | Cod sursa (job #618451) | Cod sursa (job #2369002) | Cod sursa (job #2668024)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m;
multiset<int> edges[100100];
vector<int> euler_cycle;
stack<pair<bool, int>> order;
void generate_euler_cycle() {
order.push(make_pair(false, 1));
while (!order.empty()) {
bool need_to_print;
int act;
tie(need_to_print, act) = order.top();
order.pop();
if (need_to_print) {
euler_cycle.push_back(act);
continue;
}
if (edges[act].empty()) {
order.push(make_pair(true, act));
continue;
}
int to = *edges[act].begin();
edges[act].erase(edges[act].begin());
edges[to].erase(edges[to].find(act));
order.push(make_pair(false, act));
order.push(make_pair(false, to));
}
}
int main() {
cin.tie(0);cout.tie(0);
ios::sync_with_stdio(0);
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
fin >> u >> v;
edges[u].insert(v);
edges[v].insert(u);
}
for (int i = 1; i <= n; i++)
if (edges[i].size() % 2 == 1) {
fout << -1;
return 0;
}
generate_euler_cycle();
for (int i = euler_cycle.size() - 1; i >= 1; i--)
fout << euler_cycle[i] << ' ';
return 0;
}