Pagini recente » Cod sursa (job #537117) | Cod sursa (job #2536722) | Cod sursa (job #1945176) | Cod sursa (job #137278) | Cod sursa (job #2645758)
#include <iostream>
#include <vector>
#include <stack>
#include <set>
#include <fstream>
using namespace std;
#define CAP 100001
int n, m;
ofstream out("ciclueuler.out");
ifstream in("ciclueuler.in");
multiset<int> g[CAP];
bool visited[CAP];
int nodeCnt = 0;
void dfs(int v) {
nodeCnt++;
visited[v] = true;
for (int next : g[v]) {
if (!visited[next]) {
dfs(next);
}
}
}
bool isConnected() {
dfs(0);
return nodeCnt == n;
}
bool isEven() {
for (int i = 0; i < n; i++) {
if (g[i].size() % 2 != 0) {
return false;
}
}
return true;
}
int main() {
in >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
in >> u >> v;
u--;
v--;
g[u].insert(v);
g[v].insert(u);
}
cout << '\n';
if (!isConnected() || !isEven()) {
out << -1 << '\n';
return 0;
}
stack<int> s;
s.push(0);
while (!s.empty()) {
int curr = s.top();
if (!g[curr].empty()) {
int next = *g[curr].begin();
g[curr].erase(g[curr].lower_bound(next));
g[next].erase(g[next].lower_bound(curr));
s.push(next);
}
else {
out << curr + 1 << " ";
s.pop();
}
}
return 0;
}