Pagini recente » Cod sursa (job #764513) | Cod sursa (job #4230) | Cod sursa (job #2917871) | Cod sursa (job #1130190) | Cod sursa (job #2841858)
#include <vector>
#include <algorithm>
#include <fstream>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector<vector<pair<int, int>>>gr;
stack <int> st;
int n, m, used[500002], loc[100002];
vector<int> ans;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for (int i = 0; i <= n; i++) {
gr.emplace_back(vector<pair<int, int>>());
}
int x, y;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
gr[x].push_back({y, i});
gr[y].push_back({x, i});
}
for (int i = 1; i <= n; i++) {
if (gr[i].size() % 2 == 1 || gr[i].size() == 0) {
cout << -1;
return 0;
}
}
st.push(1);
while (st.empty() != 1) {
int act = st.top();
for (int z = loc[act]; z < gr[act].size(); z++) {
int nxt = gr[act][z].first;
int nr = gr[act][z].second;
if (used[nr] == 0) {
used[nr] = 1;
loc[act]++;
st.push(nxt);
act = nxt;
z = loc[act] - 1;
}
}
act = st.top();
ans.emplace_back(act);
st.pop();
}
if (ans.size() - 1 != m) {
cout << -1;
return 0;
}
ans.pop_back();
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << ' ';
}
}