Pagini recente » Cod sursa (job #2319366) | Cod sursa (job #1233591) | Cod sursa (job #2698531) | Cod sursa (job #3151637) | Cod sursa (job #2391626)
#include <bits/stdc++.h>
using namespace std;
#define N 100005
struct edge{
int a, b;
bool c;
} M[5*N];
int n, m, st[N], vf;
vector <int> v[N], sol;
int nxt(int cur, int idx){
if (cur == M[idx].a) return M[idx].b;
return M[idx].a;
}
int main(){
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
cin >> n >> m;
for (int i=1, x, y; i<=m; i++){
cin >> x >> y;
v[x].push_back(i);
v[y].push_back(i);
M[i] = {x, y, 0};
}
for (int i=1; i<=n; i++)
if (v[i].size() & 1) return cout << -1, 0;
st[++vf] = 1;
while (vf){
int nod = st[vf];
int i = v[nod].size() - 1;
while (i>=0 && M[v[nod][i]].c) v[nod].pop_back(), i--;
if (i >= 0) st[++vf] = nxt(nod, v[nod][i]), M[v[nod][i]].c = 1, v[nod].pop_back();
else sol.push_back(nod), vf--;
}
sol.pop_back();
for (auto it: sol) cout << it << ' ';
return 0;
}