func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<multiset<int> > G;   vector<int> d;   void dfs(int u, vector<int> &ans) {     while (!G[u].empty()) {       int v = *G[u].begin();       G[u].erase(G[u].begin());       G[v].erase(G[v].find(u));       dfs(v, ans);     }     ans.push_back(u);   }   int main() {     int n, m;     cin >> n >> m;     G.resize(n);     d.resize(n, 0);     for (int i = 0; i < m; i++) {       int u, v;       scanf( %d %d , &u, &v);       u--;       v--;       G[u].insert(v);       G[v].insert(u);       d[u]++;       d[v]++;     }     vector<int> odd;     for (int i = 0; i < n; i++) {       if (d[i] & 1) odd.push_back(i);     }     int add = 0;     for (int i = 0; i < (int)odd.size() - 1; i += 2) {       int u = odd[i], v = odd[i + 1];       G[u].insert(v);       G[v].insert(u);       add++;     }     if (odd.size() & 1) {       int u = odd[odd.size() - 1];       G[u].insert(u);       G[u].insert(u);       add++;     }     if ((m + add) % 2) {       G[0].insert(0);       G[0].insert(0);       add++;     }     vector<int> ans;     dfs(0, ans);     cout << m + add << endl;     for (int i = 0; i < (int)ans.size() - 1; i++) {       if (i & 1)         printf( %d %d n , ans[i] + 1, ans[i + 1] + 1);       else         printf( %d %d n , ans[i + 1] + 1, ans[i] + 1);     }     return 0;   }   