#include <bits/stdc++.h>
using namespace std;
multiset<int> Adj[100005];
int d[100005], A[100005], stk[100005], cnt, top, n, m, tot;
inline void setIO(string a) {}
void dfs(int x) {
  while (Adj[x].size()) {
    int v = (*Adj[x].begin());
    Adj[x].erase(Adj[x].begin());
    Adj[v].erase(Adj[v].find(x));
    dfs(v);
  }
  stk[++top] = x;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    Adj[x].insert(y);
    Adj[y].insert(x);
    d[x]++;
    d[y]++;
    ++cnt;
  }
  for (int i = 1; i <= n; i++)
    if (d[i] & 1) A[++tot] = i;
  for (int i = 1; i <= tot; i += 2) {
    int u = A[i], v = A[i + 1];
    Adj[u].insert(v);
    Adj[v].insert(u);
    d[u]++;
    d[v]++;
    ++cnt;
  }
  if (cnt & 1) {
    Adj[1].insert(1);
    Adj[1].insert(1);
    ++cnt;
  }
  dfs(1);
  printf("%d\n", cnt);
  for (int i = 1; i <= top - 1; i++) {
    if (i & 1)
      printf("%d %d\n", stk[i], stk[i + 1]);
    else
      printf("%d %d\n", stk[i + 1], stk[i]);
  }
  scanf("\n");
  return 0;
}
