func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   vector<pair<int, int> > e;   bool check(vector<pair<int, int> > res) {     if (res.size() > (n + m + 1) / 2) return false;     vector<int> d(n, 0), d2(n, 0);     for (pair<int, int> i : res) {       d[--i.first]++;       d[--i.second]++;     }     for (pair<int, int> i : e) {       d2[--i.first]++;       d2[--i.second]++;     }     for (int i = 0; i < n; i++) {       if ((d2[i] + 1) / 2 > d[i]) return false;     }     return true;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cin >> n >> m;     e.resize(m);     vector<set<int> > g(n + 1);     for (int i = 0; i < m; i++) {       cin >> e[i].first >> e[i].second;       g[e[i].first].insert(e[i].second);       g[e[i].second].insert(e[i].first);     }     for (int i = 1; i <= n; i++) {       if ((int)(g[i].size()) & 1) {         g[i].insert(0);         g[0].insert(i);       }     }     vector<int> c(n + 1, 0);     vector<pair<int, int> > res;     for (int s = 1; s <= n; s++) {       if (!c[s]) {         vector<int> st, ep;         st.push_back(s);         while (!st.empty()) {           int f = st.back();           c[f] = 1;           if (g[f].empty()) {             st.pop_back();             ep.push_back(f);           } else {             int v = *g[f].begin();             g[f].erase(v);             g[v].erase(f);             st.push_back(v);           }         }         ep.pop_back();         for (int i = 0; i < (int)ep.size(); i++) {           int v0 = ep[(ep.size() + i - 1) % ep.size()], v1 = ep[i],               v2 = ep[(i + 1) % ep.size()], v3 = ep[(i + 2) % ep.size()];           if (!v1 || !v2) continue;           if (!v0 || !v3 || !(i & 1)) {             res.push_back({v1, v2});           }         }       }     }     cout << res.size() <<   n ;     for (pair<int, int> i : res) {       cout << i.first <<     << i.second <<   n ;     }     return 0;   }   