Pagini recente » Cod sursa (job #1362452) | Cod sursa (job #2550805) | Cod sursa (job #1880350) | Cod sursa (job #1479744) | Cod sursa (job #2841866)
#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;
gr.resize(n + 2);
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]==z + 1;
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] << ' ';
}
}