#include <bits/stdc++.h>   using namespace std;   int n, m;   set<int> nx[1000100];   vector<pair<int, int> > nw;   int a[1000100];   vector<pair<int, int> > ans;   set<pair<int, int> > order;   set<pair<int, int> > lst;   int main() {     ios_base ::sync_with_stdio(0);     cin.tie();     cout.tie();     srand(23095);     cin >> n >> m;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       x--;       y--;       nx[x].insert(y);       nx[y].insert(x);       a[x]++;       a[y]++;     }     for (int i = 0; i < n; i++) {       a[i] = (a[i] / 2) + (a[i] % 2);       order.insert(make_pair(a[i], i));     }     while (!order.empty()) {       int v = order.begin()->second;       order.erase(order.begin());       nw.clear();       for (auto u : nx[v]) {         nw.push_back(make_pair(a[u], u));       }       sort(nw.rbegin(), nw.rend());       for (int j = 0; a[v] > 0; j++) {         a[v]--;         if (a[nw[j].second] > 0) {           order.erase(make_pair(a[nw[j].second], nw[j].second));         }         a[nw[j].second]--;         if (a[nw[j].second] > 0) {           order.insert(make_pair(a[nw[j].second], nw[j].second));         }         ans.push_back(make_pair(v, nw[j].second));         nx[v].erase(nw[j].second);         nx[nw[j].second].erase(v);       }     }     cout << ans.size() <<   n ;     for (auto i : ans) {       cout << i.first + 1 <<     << i.second + 1 <<   n ;     }     return 0;   }   