func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 100000 + 10;   struct Edge {     int v;     bool used;     Edge(int v, int used) : v(v), used(used) {}   };   vector<int> adj[MAXN], odd, ans;   vector<Edge> edges;   int p, n, m, deg[MAXN];   int cur[MAXN];   void dfs(int u) {     for (auto &idx = cur[u]; idx < adj[u].size(); ++idx) {       if (!edges[adj[u][idx]].used) {         edges[adj[u][idx]].used = 1;         edges[adj[u][idx] ^ 1].used = 1;         dfs(edges[adj[u][idx]].v);       }     }     ans.push_back(u);   }   int main() {     cin >> n >> m;     for (int i = 0; i < m; ++i) {       int u, v;       cin >> u >> v;       ++deg[u], ++deg[v];       edges.emplace_back(v, 0);       edges.emplace_back(u, 0);       int sz = edges.size();       adj[u].push_back(sz - 2);       adj[v].push_back(sz - 1);     }     for (int i = (1); i < (n + 1); ++i)       if (deg[i] & 1) {         odd.push_back(i);       }     for (int i = 0; i < (int)odd.size(); i += 2) {       int u = odd[i], v = odd[i + 1];       edges.emplace_back(v, 0);       edges.emplace_back(u, 0);       int sz = edges.size();       adj[u].push_back(sz - 2);       adj[v].push_back(sz - 1);     }     p = m + (odd.size() / 2);     dfs(1);     if (ans.size() % 2 == 0) {       ++p;       ans.push_back(1);     }     cout << p <<   n ;     for (int i = 1; i < (int)ans.size(); ++i) {       int u = ans[i - 1], v = ans[i];       if (!(i & 1)) {         swap(u, v);       }       cout << u <<     << v <<   n ;     }     return 0;   }   