Pagini recente » Cod sursa (job #1074040) | Cod sursa (job #305153) | Cod sursa (job #1178719) | Cod sursa (job #1459261) | Cod sursa (job #2715820)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX = 1e5;
const int MMAX = 5e5;
int N, M, deg[NMAX + 2];
vector <pair<int, int>> g[NMAX + 2];
bool seen[MMAX + 2];
int main() {
cin >> N >> M;
for(int i = 1; i <= M; i++) {
int x, y;
cin >> x >> y;
g[x].push_back({y, i});
g[y].push_back({x, i});
deg[x]++;
deg[y]++;
}
for(int i = 1; i <= N; i++) {
if(deg[i] % 2 == 1) {
cout << -1 << '\n';
return 0;
}
}
stack <int> st;
st.push(1);
vector <int> sol;
while(!st.empty()) {
int curr = st.top();
while(!g[curr].empty() && seen[g[curr].back().second]) {
g[curr].pop_back();
}
if(!g[curr].empty()) {
seen[g[curr].back().second] = true;
st.push(g[curr].back().first);
g[curr].pop_back();
} else {
sol.push_back(curr);
st.pop();
}
}
for(int i = 0; i < (int)sol.size() - 1; i++) {
cout << sol[i] << ' ';
}
return 0;
}