#include <bits/stdc++.h>
using namespace std;
struct ed {
  int v, nxt;
  bool f;
} tr[100005 << 3];
int head[100005], cnt = 1, deg[100005], an[1000005], tot = 0;
bool vis[100005];
void add(int u, int v) {
  tr[++cnt] = (ed){v, head[u], 0}, head[u] = cnt;
  tr[++cnt] = (ed){u, head[v], 0}, head[v] = cnt;
}
void dfs(int x) {
  for (int &t = head[x]; t; t = tr[t].nxt) {
    int y = tr[t].v;
    if (!tr[t].f) {
      tr[t].f = 1;
      tr[t ^ 1].f = 1;
      dfs(y);
    }
  }
  an[++tot] = x;
}
int main() {
  int n, m, a, b, ans = 0, lst = 0, fl = 0, i;
  scanf("%d%d", &n, &m);
  for (i = 1; i <= m; ++i) {
    scanf("%d%d", &a, &b);
    add(a, b);
    deg[a]++, deg[b]++;
  }
  for (i = 1; i <= n; ++i) {
    if (deg[i] & 1) {
      ans++;
      if (ans % 2 == 1)
        lst = i;
      else if (lst)
        add(lst, i);
    }
  }
  m += ans / 2;
  if (m & 1) {
    add(1, 1);
    m++;
  }
  printf("%d\n", m);
  for (i = 1; i <= n; ++i) {
    if (!vis[i]) {
      tot = fl = 0;
      dfs(i);
      for (i = 1; i < tot; ++i) {
        printf("%d %d\n", an[i + fl], an[i + (!fl)]);
        fl ^= 1;
      }
    }
  }
}
