#include <bits/stdc++.h>
const int big = 0x7fffffff;
using namespace std;
inline void read(int &x) {
  x = 0;
  char ch = getchar();
  int pd = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') pd = -pd;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  x *= pd;
}
inline void write(const int &x) {
  char ggg[10001];
  int s = 0;
  int tmp = x;
  if (tmp == 0) {
    putchar('0');
    return;
  }
  if (tmp < 0) {
    tmp = -tmp;
    putchar('-');
  }
  while (tmp > 0) {
    ggg[s++] = tmp % 10 + '0';
    tmp /= 10;
  }
  while (s > 0) {
    putchar(ggg[--s]);
  }
}
const int N = 1e6 + 233;
int n, m, du[N], use[N], cnt;
struct dd {
  int begin, end;
} e[N];
vector<dd> f;
int main() {
  read(n);
  read(m);
  int t = (n + m + 1) / 2;
  for (register int i = 1; i <= m; ++i) {
    read(e[i].begin);
    read(e[i].end);
    ++du[e[i].begin];
    ++du[e[i].end];
  }
  srand(time(NULL));
  random_shuffle(e + 1, e + m + 1);
  int cc = 0;
  for (register int i = 1; i <= m; ++i) {
    int x = e[i].begin, u = e[i].end;
    if (du[x] - use[x] - 1 >= (du[x] + 1) / 2 &&
        du[u] - use[u] - 1 >= (du[u] + 1) / 2 && m - cc > t) {
      ++use[x];
      ++use[u];
      ++cc;
    } else {
      f.push_back(e[i]);
    }
  }
  write(f.size());
  puts("");
  for (auto it : f) printf("%d %d\n", it.begin, it.end);
  return 0;
}
