Pagini recente » Cod sursa (job #143161) | Cod sursa (job #1125709) | Cod sursa (job #1384781) | Cod sursa (job #2365913) | Cod sursa (job #2196027)
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, m;
vector <int> sol, v[N];
stack <int> S;
struct edge{
int a, b, c;
} M[5*N];
int next(edge A, int nodcr){
if (nodcr == A.a) return A.b;
else return A.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, 1};
}
for (int i=1; i<=n; i++){
if (v[i].size() & 1) return cout << -1, 0;
}
S.push(1);
while (!S.empty()){
int nod = S.top();
int i = v[nod].size() - 1;
while (i >= 0 && !M[v[nod][i]].c) v[nod].pop_back(), i--;
if (!v[nod].size()) sol.push_back(nod), S.pop();
else M[v[nod][i]].c = 0, S.push(next(M[v[nod][i]], nod)), v[nod].pop_back();
}
sol.pop_back();
for (auto it: sol) cout << it << " ";
return 0;
}