#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
using namespace std;
const int N = 1e6 + 5;
struct edge {
  int u, v;
} e[N];
vector<int> vc;
int n, m, d[N], dd[N];
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    scanf("%d %d", &e[i].u, &e[i].v);
    d[e[i].u]++;
    d[e[i].v]++;
  }
  int need = max(0, m - (n + m + 1) / 2);
  random_shuffle(e + 1, e + 1 + m);
  for (int i = 1; i <= n; ++i) dd[i] = d[i];
  for (int i = 1; i <= m; ++i) {
    int u = e[i].u, v = e[i].v;
    if (need && dd[u] - 1 >= (d[u] + 1) / 2 && dd[v] - 1 >= (d[v] + 1) / 2) {
      dd[u]--;
      dd[v]--;
      need--;
    } else
      vc.emplace_back(i);
  }
  printf("%d\n", (int)vc.size());
  for (int i : vc) printf("%d %d\n", e[i].u, e[i].v);
  return 0;
}
