#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int u[maxn], v[maxn], d[maxn], t[maxn], f[maxn];
int vis[maxn];
int n, m;
vector<int> id;
int main() {
  ios::sync_with_stdio(0);
  srand(time(NULL));
  cin >> n >> m;
  id.resize(m);
  for (int i = 1; i <= m; i++) {
    cin >> u[i] >> v[i];
    d[u[i]]++, d[v[i]]++;
    id[i - 1] = i;
  }
  int time = 0;
  while (1) {
    random_shuffle(id.begin(), id.end());
    time++;
    vector<int> ans;
    for (int i = 1; i <= n; i++) {
      t[i] = (d[i] + 1) / 2;
    }
    bool ctn = 0;
    int L = (n + m + 1) / 2;
    for (const auto &i : id) {
      if (L <= 0 && (t[u[i]] > 0 || t[v[i]] > 0)) {
        ctn = 1;
        break;
      }
      if (t[u[i]] > 0 && t[v[i]] > 0) {
        vis[i] = time;
        ans.push_back(i);
        t[u[i]]--;
        t[v[i]]--;
        L--;
      }
    }
    if (ctn) continue;
    for (const auto &i : id) {
      if (vis[i] == time) continue;
      if (L <= 0 && (t[u[i]] > 0 || t[v[i]] > 0)) {
        ctn = 1;
        break;
      }
      if (t[u[i]] > 0 || t[v[i]] > 0) {
        ans.push_back(i);
        t[u[i]]--;
        t[v[i]]--;
        L--;
      }
    }
    if (ctn) continue;
    int k = ans.size();
    cout << k << endl;
    for (auto i : ans) {
      cout << u[i] << " " << v[i] << endl;
    }
    return 0;
  }
  return 0;
}
