func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   struct edge {     int from;     int to;     int next;   } E[500005 << 1];   int head[100005];   int deg[100005];   int tmp[500005];   int used[500005 << 1];   int size = 1;   void add_edge(int u, int v) {     size++;     E[size].from = u;     E[size].to = v;     E[size].next = head[u];     head[u] = size;   }   stack<int> s, ans;   void euler() {     s.push(1);     while (!s.empty()) {       int x = s.top();       int i = head[x];       while (i != 0 && used[i] == 1) i = E[i].next;       if (i != 0) {         s.push(E[i].to);         used[i] = used[i ^ 1] = 1;         head[x] = E[i].next;       } else {         s.pop();         ans.push(x);       }     }   }   int main() {     int u, v;     scanf( %d %d , &n, &m);     for (int i = 1; i <= m; i++) {       scanf( %d %d , &u, &v);       add_edge(u, v);       add_edge(v, u);       deg[u]++;       deg[v]++;     }     int pre = 0;     int cnt = 0;     for (int i = 1; i <= n; i++) {       if (deg[i] % 2 == 1) {         if (pre != 0) {           add_edge(pre, i);           add_edge(i, pre);           pre = 0;         } else           pre = i;       }     }     if (((size - 1) / 2) % 2 == 1) {       add_edge(1, 1);       size++;     }     euler();     printf( %d n , (size - 1) / 2);     int ptr = 0;     while (!ans.empty()) {       tmp[++ptr] = ans.top();       ans.pop();     }     for (int i = 1; i <= ptr - 1; i++) {       if (i & 1)         printf( %d %d n , tmp[i], tmp[i + 1]);       else         printf( %d %d n , tmp[i + 1], tmp[i]);     }   }   