int n, m; int cur[kMaxN]; bool vis[kMaxN * 2]; std::vector<int> path; std::vector<std::pair<int, int>> G[kMaxN];
voiddfs(int u){ for (int i = cur[u]; i < (int)G[u].size(); i = cur[u]) { cur[u] = i + 1; auto [v, id] = G[u][i]; if (vis[id]) continue; vis[id] = 1; dfs(v); } if (path.size()) { if (path.size() & 1) std::cout << path.back() << ' ' << u << '\n'; else std::cout << u << ' ' << path.back() << '\n'; } path.emplace_back(u); }
voiddickdreamer(){ std::cin >> n >> m; for (int i = 1; i <= m; ++i) { int u, v; std::cin >> u >> v; G[u].emplace_back(v, i), G[v].emplace_back(u, i); } std::vector<int> v; for (int i = 1; i <= n; ++i) if (G[i].size() & 1) v.emplace_back(i); for (int i = 0; i + 1 < v.size(); i += 2) ++m, G[v[i]].emplace_back(v[i + 1], m), G[v[i + 1]].emplace_back(v[i], m); if (m & 1) G[1].emplace_back(1, ++m), G[1].emplace_back(1, m); std::cout << m << '\n'; dfs(1); }