#include <bits/stdc++.h>
using namespace std;
long long n, m, dg[2][1000069], nn = 0, zs = 0;
vector<long long> al[1000069];
bitset<1000069> vtd;
pair<long long, long long> ed[1000069];
vector<pair<long long, long long>> sq;
void dfs(long long x, long long ls) {
  long long i, sz = al[x].size(), l;
  vtd[x] = 1;
  for (i = 0; i < sz; i++) {
    l = al[x][i];
    if (!vtd[l]) {
      sq.push_back({x, l});
      zs++;
      dg[0][x]++;
      dg[0][l]++;
      dfs(l, x);
    } else if (l != ls && x < l) {
      nn++;
      ed[nn] = {x, l};
    }
  }
}
int main() {
  long long i, k, l, tg;
  scanf("%lld%lld", &n, &m);
  for (i = 0; i < m; i++) {
    scanf("%lld%lld", &k, &l);
    al[k].push_back(l);
    al[l].push_back(k);
  }
  for (i = 1; i <= n; i++) {
    if (!vtd[i]) {
      dfs(i, 0);
    }
  }
  for (i = 1; i <= nn; i++) {
    k = ed[i].first;
    l = ed[i].second;
    if (dg[0][k] == dg[1][k] || dg[0][l] == dg[1][l]) {
      tg = 0;
      sq.push_back(ed[i]);
      zs++;
    } else {
      tg = 1;
    }
    dg[tg][k]++;
    dg[tg][l]++;
  }
  printf("%lld\n", zs);
  for (i = 0; i < zs; i++) {
    printf("%lld %lld\n", sq[i].first, sq[i].second);
  }
}
