Pagini recente » Cod sursa (job #3279221) | Clasament Grigore Mosil 2016 Clasa a 9-a | Cod sursa (job #776231) | Cod sursa (job #406110) | Cod sursa (job #2175716)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
const int NMAX = 100004;
const int MMAX = 500005;
vector <pair<int, int> > v[NMAX];
vector<int> sol;
stack<int> s;
int seen[MMAX], n, m;
int main() {
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
v[x].push_back(make_pair(y, i));
v[y].push_back(make_pair(x, i));
}
for (int i = 1; i <= n; i++) {
if (v[i].size() % 2 == 1) {
cout << "-1";
return 0;
}
}
s.push(1);
while (!s.empty()) {
int nod = s.top();
if (v[nod].size() == 0) {
sol.push_back(nod);
s.pop();
} else {
int edge = v[nod].back().second;
int y = v[nod].back().first;
v[nod].pop_back();
if (!seen[edge]) {
seen[edge] = 1;
s.push(y);
}
}
}
for (int i = 0; i < sol.size() - 1; i++) {
cout << sol[i] << " ";
}
return 0;
}