func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAX = 100005;   const int N = 200005;   int from[N], to[N];   stack<pair<int, int> > G[MAX];   stack<int> res;   bool visited[2 * N];   void dfs(int src, int ind = -1) {     if (ind != -1) {       visited[ind] = true;     }     while (!G[src].empty()) {       int v = G[src].top().first, e = G[src].top().second;       G[src].pop();       if (!visited[e]) {         dfs(v, e);       }     }     res.push(src);   }   int main() {     int n, m;     scanf( %d %d , &n, &m);     for (int i = 0; i < m; i++) {       scanf( %d %d , &from[i], &to[i]);       from[i]--;       to[i]--;       G[from[i]].push(make_pair(to[i], i));       G[to[i]].push(make_pair(from[i], i));     }     int pre = -1, cnt = 0;     for (int i = 0; i < n; i++) {       if (G[i].size() % 2) {         if (pre == -1) {           pre = i;         } else {           G[pre].push(make_pair(i, cnt + m));           G[i].push(make_pair(pre, cnt++ + m));           pre = -1;         }       }     }     if ((cnt + m) % 2) {       G[0].push(make_pair(0, cnt + m));     }     dfs(0);     pre = res.top();     res.pop();     printf( %d n , res.size());     while (!res.empty()) {       if (res.size() % 2) {         printf( %d %d n , 1 + pre, 1 + res.top());       } else {         printf( %d %d n , 1 + res.top(), 1 + pre);       }       pre = res.top();       res.pop();     }     return 0;   }   