#include <bits/stdc++.h>
inline void scanint(int& x) {
  register int c = getchar();
  x = 0;
  int neg = 0;
  for (; ((c < 48 || c > 57) && c != '-'); c = getchar())
    ;
  if (c == '-') {
    neg = 1;
    c = getchar();
  }
  for (; c > 47 && c < 58; c = getchar()) {
    x = (x << 1) + (x << 3) + c - 48;
  }
  if (neg) x = -x;
}
int cmp_double(double a, double b, double eps = 1e-9) {
  return a + eps > b ? b + eps > a ? 0 : 1 : -1;
}
using namespace std;
const int INF = 0x3F3F3F3F;
const int NEGINF = 0xC0C0C0C0;
void build(vector<int>& out, vector<vector<int> >& g, vector<int>& e, int v) {
  while (!g[v].empty()) {
    int ce = g[v].back();
    g[v].pop_back();
    if (e[ce] == -1) continue;
    int nxt = e[ce] - v;
    e[ce] = -1;
    build(out, g, e, nxt);
  }
  out.push_back(v);
}
int main() {
  int N, M;
  scanf(" %d %d", &N, &M);
  vector<int> e;
  vector<int> deg(N, 0);
  vector<vector<int> > g(N);
  for (__typeof__(0) i = (0); i < (M); ++i) {
    int a, b;
    scanf(" %d %d", &a, &b);
    a--;
    b--;
    deg[a]++;
    deg[b]++;
    g[a].push_back(i);
    g[b].push_back(i);
    e.push_back(a + b);
  }
  int last = -1;
  for (__typeof__(0) i = (0); i < (N); ++i) {
    if (!(deg[i] % 2)) continue;
    if (last == -1)
      last = i;
    else {
      g[i].push_back(e.size());
      g[last].push_back(e.size());
      deg[i]++;
      deg[last]++;
      e.push_back(last + i);
      last = -1;
      M++;
    }
  }
  if ((M % 2)) {
    g[0].push_back(e.size());
    e.push_back(0);
    M++;
  }
  vector<int> out;
  build(out, g, e, 0);
  printf("%d\n", M);
  for (__typeof__(0) i = (0); i < (M); ++i) {
    if (i % 2)
      printf("%d %d\n", out[i] + 1, out[(i + 1) % out.size()] + 1);
    else
      printf("%d %d\n", out[(i + 1) % out.size()] + 1, out[i] + 1);
  }
  return 0;
}
