Pagini recente » Cod sursa (job #2296588) | Cod sursa (job #87670) | Cod sursa (job #1299306) | Cod sursa (job #1453900) | Cod sursa (job #2216164)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int MAXN = 1e5;
const int MAXM = 5e5;
int n, m;
vector<pair<int, int>> g[MAXN + 1];
bool viz[MAXM + 1];
int grad[MAXN + 1];
vector<int> ans;
int main() {
in >> n >> m;
for (int i = 1; i <= m; ++ i) {
int a, b;
in >> a >> b;
++ grad[a]; ++ grad[b];
g[a].push_back({b, i});
g[b].push_back({a, i});
}
for (int i = 1; i <= n; ++ i) {
if (grad[i] & 1 || grad[i] == 0) {
out << -1;
return 0;
}
}
stack<int> dfs;
dfs.push(1);
while (dfs.size()) {
int node = dfs.top();
if (g[node].size()) {
int x = g[node].back().first;
int muchie = g[node].back().second;
g[node].pop_back();
if (!viz[muchie]) {
viz[muchie] = 1;
dfs.push(x);
}
}
else {
ans.push_back(node);
dfs.pop();
}
}
ans.pop_back();
for (auto x : ans)
out << x << ' ';
return 0;
}