#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 5;
int n, m, x, y, r[N];
int fi[N], nt[N], to[N], tot = 1;
void link(int x, int y) { nt[++tot] = fi[x], to[tot] = y, fi[x] = tot; }
int bz[N], d[N], d0;
void dg(int x) {
  for (int i = fi[x]; i; i = fi[x]) {
    fi[x] = nt[fi[x]];
    if (bz[i]) continue;
    bz[i] = bz[i ^ 1] = 1;
    dg(to[i]);
  }
  d[++d0] = x;
}
int ans[N][2], ans0;
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1, B = m; i <= B; i++) {
    scanf("%d %d", &x, &y);
    link(x, y);
    link(y, x);
    r[x]++;
    r[y]++;
  }
  int la = 0;
  for (int i = 1, B = n; i <= B; i++)
    if (r[i] & 1) {
      if (la)
        link(la, i), link(i, la), la = 0;
      else
        la = i;
    }
  if (la) link(la, la), link(la, la);
  for (int i = 1, B = n; i <= B; i++)
    if (fi[i]) {
      d0 = 0;
      dg(i);
      if (d0 % 2 == 0) {
        int x = d[d0];
        d[++d0] = x;
      }
      for (int j = 1, B = d0 - 1; j <= B; j++) {
        ans[++ans0][0] = d[j];
        ans[ans0][1] = d[j + 1];
        if (j & 1) swap(ans[ans0][0], ans[ans0][1]);
      }
    }
  printf("%d\n", ans0);
  for (int i = 1, B = ans0; i <= B; i++)
    printf("%d %d\n", ans[i][0], ans[i][1]);
}
