#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 3;
struct fk {
  int u, v, pos;
};
vector<fk> gra;
bool cmp(fk b, fk c) { return b.v > c.v; }
int vis[maxn];
int diru[maxn];
int dirv[maxn];
int main() {
  int n, m, total;
  int x, y, last, q;
  cin >> n >> m;
  last = m;
  total = (n + m + 1) / 2;
  for (int i = 0; i < m; i++) {
    cin >> x >> y;
    fk point;
    point.u = x;
    point.v = y;
    point.pos = 1;
    gra.push_back(point);
    diru[x]++;
    diru[y]++;
  }
  for (int i = 1; i <= n; i++) {
    vis[i] = (diru[i] + 1) / 2;
  }
  sort(gra.begin(), gra.end(), cmp);
  for (int i = 0; i < gra.size() && last > total; i++) {
    if (vis[gra[i].u] == diru[gra[i].u]) continue;
    if (vis[gra[i].v] == diru[gra[i].v]) continue;
    diru[gra[i].v]--;
    diru[gra[i].u]--;
    gra[i].pos = 0;
    last--;
  }
  cout << last << endl;
  for (int i = 0; i < gra.size(); i++) {
    if (gra[i].pos == 0)
      continue;
    else
      printf("%d %d\n", gra[i].u, gra[i].v);
  }
  return 0;
}
