Pagini recente » Clasamentul arhivei de probleme | Clasamentul arhivei de probleme | Cod sursa (job #2165132) | Clasamentul arhivei de probleme | Cod sursa (job #2883905)
#define d(x) std::cout << x << std::endl
#define dm(msg, x) std::cout << msg << x << std::endl
#define all(a) a.begin(), a.end()
#define range(a, l, r) a.begin() + l, a.begin() + r
#define aall(a, n) a + 1, a + 1 + n
#define arange(a, l, r) a + l, a + r
#define maxself(a, b) a = std::max(a, b);
#define minself(a, b) a = std::min(a, b);
#define inout(f) std::ifstream in((f) + (std::string) ".in");std::ofstream out((f) + (std::string) ".out")
#include <iostream>
#include <fstream>
#include <vector>
const int NMAX = 1e5;
class Edge {
public:
int node;
int index;
Edge(int node, int index):
node(node), index(index) {};
};
int n, m;
int vis[1 + NMAX];
std::vector<Edge> graph[1 + NMAX];
bool used[1 + NMAX];
std::vector<int> stack;
std::vector<int> ans;
void dfs(int node) {
vis[node] = true;
for (auto &edge : graph[node]) {
if (!vis[edge.node])
dfs(edge.node);
}
}
int main() {
inout("ciclueuler");
in >> n >> m;
for (int i = 1; i <= m; ++i) {
int a, b;
in >> a >> b;
graph[a].emplace_back(b, i);
graph[b].emplace_back(a, i);
}
dfs(1);
for (int i = 1; i <= n; ++i) {
if (graph[i].size() % 2 == 1 || !vis[i]) {
out << -1 << '\n';
return 0;
}
}
stack.push_back(1);
while (!stack.empty()) {
int cNode = stack.back();
while (!graph[cNode].empty()) {
auto edge = graph[cNode].back();
graph[cNode].pop_back();
if (used[edge.index])
continue;
used[edge.index] = true;
cNode = edge.node;
stack.push_back(cNode);
}
ans.push_back(cNode);
stack.pop_back();
}
ans.pop_back();
for (int i : ans)
out << i << ' ';
return 0;
}