Pagini recente » Cod sursa (job #3314038) | Cod sursa (job #3327564) | Cod sursa (job #1026115) | Cod sursa (job #583881) | Cod sursa (job #3357970)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int MAXN = 100001;
const int MAXM = 500001;
vector<int> adj[MAXN];
bool usedEdge[MAXM];
int degree[MAXN];
int n, m;
vector<int> cycle;
struct Edge {
int u, v;
} edges[MAXM];
void dfs(int u) {
while (!adj[u].empty()) {
int e = adj[u].back();
adj[u].pop_back();
if (usedEdge[e]) continue;
usedEdge[e] = true;
int v = (edges[e].u == u) ? edges[e].v : edges[e].u;
dfs(v);
cycle.push_back(v);
}
}
int main() {
fin >> n >> m;
for (int i = 1; i <= m; ++i) {
fin >> edges[i].u >> edges[i].v;
adj[edges[i].u].push_back(i);
adj[edges[i].v].push_back(i);
degree[edges[i].u]++;
degree[edges[i].v]++;
}
for (int i = 1; i <= n; ++i) {
if (degree[i] % 2 != 0) {
fout << -1 << '\n';
return 0;
}
}
dfs(1);
if ((int)cycle.size() != m) {
fout << -1 << '\n';
return 0;
}
reverse(cycle.begin(), cycle.end());
for (int x : cycle) {
fout << x << ' ';
}
fout << '\n';
return 0;
}