Pagini recente » Cod sursa (job #2458911) | Cod sursa (job #1786886) | Cod sursa (job #1364166) | Cod sursa (job #2435468) | Cod sursa (job #2929596)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int NMAX = 1e5;
int n, m;
vector<int> adj[NMAX + 1];
struct Edge {
int u, v;
bool visited;
int other(int node) {
return u ^ v ^ node;
}
};
vector<Edge> edges;
vector<int> cycle;
void addEdge(int u, int v) {
int m = edges.size();
edges.push_back({u, v, 0});
adj[u].push_back(m);
adj[v].push_back(m);
}
void euler(int u) {
for(const int &it: adj[u]) {
int v = edges[it].other(u);
if(!edges[it].visited) {
edges[it].visited = 1;
euler(v);
}
}
cycle.push_back(u);
}
int main() {
ios_base :: sync_with_stdio(false);
fin >> n >> m;
for(int i = 0; i < m; i++) {
int u, v;
fin >> u >> v;
addEdge(u, v);
}
int start = -1;
for(int i = 1; i <= n && start == -1; i++) {
if(!(adj[i].size() & 1)) {
start = i;
}
}
if(start == -1) {
fout << "-1\n";
fin.close();
fout.close();
return 0;
}
euler(start);
reverse(cycle.begin(), cycle.end());
cycle.pop_back();
if(cycle.size() < m) {
fout << "-1\n";
fin.close();
fout.close();
return 0;
}
for(const int &it: cycle) {
fout << it << " ";
}
fout << '\n';
fin.close();
fout.close();
return 0;
}