func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m, st[350005], dr[350005], grad[350005], bad[350005], l, order[350005],       len;   bool used[350005], stare[350005];   vector<int> L[350005];   vector<int>::iterator it[350005];   inline void add_edge(int x, int y) {     ++m;     L[x].push_back(m);     L[y].push_back(m);     st[m] = x;     dr[m] = y;   }   inline void Dfs(int nod) {     while (it[nod] != L[nod].end()) {       if (used[*it[nod]]) {         ++it[nod];         continue;       }       used[*it[nod]] = 1;       Dfs(st[*it[nod]] + dr[*it[nod]] - nod);     }     order[++len] = nod;   }   int main() {     int i, j, x, y;     cin >> n >> m;     for (i = 1; i <= m; ++i) {       cin >> st[i] >> dr[i];       L[st[i]].push_back(i);       L[dr[i]].push_back(i);       ++grad[st[i]];       ++grad[dr[i]];     }     for (i = 1; i <= n; ++i)       if (grad[i] & 1) bad[++l] = i;     for (i = 1; i < l; i += 2) add_edge(bad[i], bad[i + 1]);     if (m & 1) add_edge(1, 1);     for (i = 1; i <= n; ++i) it[i] = L[i].begin();     Dfs(1);     cout << m <<   n ;     for (i = 1; i < len; ++i) {       x = order[i];       y = order[i + 1];       if (!stare[x]) {         cout << y <<     << x <<   n ;         stare[y] = 1;       } else {         cout << x <<     << y <<   n ;         stare[y] = 0;       }     }     return 0;   }   