#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
struct aa {
  int x, y;
} s[maxn];
int vis1[maxn], vis2[maxn], vis3[maxn];
bool judge(int i) {
  if (vis2[s[i].x] + 1 > (vis1[s[i].x]) / 2 ||
      vis2[s[i].y] + 1 > (vis1[s[i].y]) / 2)
    return false;
  else
    return true;
}
bool cmp(aa a, aa b) {
  if (a.x == b.x)
    return a.x < b.x;
  else
    return a.y > b.y;
}
int main() {
  int n, m, cnt, res;
  scanf("%d%d", &n, &m);
  cnt = m;
  res = (n + m + 1) / 2;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &s[i].x, &s[i].y);
    if (s[i].x < s[i].y) swap(s[i].x, s[i].y);
    vis1[s[i].x]++;
    vis1[s[i].y]++;
  }
  random_shuffle(s, s + m);
  for (int i = 0; i < m && cnt > res; i++) {
    if (judge(i)) {
      vis2[s[i].x]++;
      vis2[s[i].y]++;
      vis3[i] = 1;
      cnt--;
    }
  }
  printf("%d\n", cnt);
  for (int i = 0; i < m; i++) {
    if (!vis3[i]) {
      printf("%d %d\n", s[i].x, s[i].y);
    }
  }
  return 0;
}
