func_code_string: #include <bits/stdc++.h>   #pragma warning(disable : 6031)   #pragma warning(disable : 4101)   using namespace std;   const int INF = 1e9;   const long long LINF = 1e18;   const double PI = acos(-1);   const int MAXN = 1000006;   int n, m, v1, v2, Deg[MAXN], visited[MAXN];   vector<unordered_set<int>> G;   vector<int> C;   set<pair<int, int>> erased;   void find_component(int v) {     visited[v] = true;     C.push_back(v);     for (int c : G[v]) {       if (!visited[c]) {         find_component(c);       }     }   }   void eulerian_cycle(int v) {     stack<int> S;     vector<int> ans;     S.push(v);     while (!S.empty()) {       int s = S.top();       if (G[s].empty()) {         ans.push_back(s);         S.pop();       } else {         int c = *G[s].begin();         G[s].erase(G[s].begin());         G[c].erase(s);         S.push(c);       }     }     int ans_size = ((int)(ans).size());     for (int i = 1; i < ((int)(ans).size()); i += 2) {       if (ans[i] != 0 && ans[i + 1] != 0) {         if (ans[i - 1] != 0 && ans[(i + 2) % ans_size] != 0) {           if (ans[i] < ans[i + 1]) {             erased.erase({ans[i], ans[i + 1]});           } else {             erased.erase({ans[i + 1], ans[i]});           }         }       }     }   }   int main() {     scanf( %d%d , &n, &m);     G.resize(n + 1);     while (m--) {       scanf( %d%d , &v1, &v2);       G[v1].insert(v2);       G[v2].insert(v1);       if (v1 < v2) {         erased.insert({v1, v2});       } else {         erased.insert({v2, v1});       }       Deg[v1]++;       Deg[v2]++;     }     for (int i = 1; i <= n; i++) {       if (!visited[i]) {         assert(G[0].empty());         C.clear();         find_component(i);         if (((int)(C).size()) == 1) {           continue;         }         for (int v : C) {           if (Deg[v] % 2 == 1) {             G[0].insert(v);             G[v].insert(0);           }         }         eulerian_cycle(C.front());       }     }     printf( %d n , ((int)(erased).size()));     for (pair<int, int> p : erased) {       printf( %d %d n , p.first, p.second);     }     return 0;   }   