#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int ed, nxt;
};
const int maxn = 1e5 + 10, maxm = 3e5 + 10;
int n, m, ecnt;
bool vis[maxm << 1];
int hed[maxn], deg[maxn], ov[maxn], ans[maxm], curr[maxn];
Edge e[maxm << 1];
inline void addEdge(int u, int v) {
  e[ecnt] = (Edge){v, hed[u]};
  hed[u] = ecnt++;
}
void Euler(int u) {
  int i, j;
  for (int &i = curr[u]; ~i; i = e[i].nxt) {
    if (vis[i]) {
      continue;
    }
    vis[i] = vis[i ^ 1] = 1;
    j = i;
    Euler(e[i].ed);
    ans[++ans[0]] = j;
  }
}
int main() {
  int i, u, v, E;
  scanf("%d%d", &n, &m);
  for (i = (1); i <= (n); i++) {
    hed[i] = -1;
  }
  for (i = (1); i <= (m); i++) {
    scanf("%d%d", &u, &v);
    addEdge(u, v);
    addEdge(v, u);
    deg[u]++;
    deg[v]++;
  }
  for (i = (1); i <= (n); i++) {
    if (deg[i] & 1) {
      ov[++ov[0]] = i;
    }
  }
  for (i = 1; i <= ov[0]; i += 2) {
    u = ov[i];
    v = ov[i + 1];
    addEdge(u, v);
    addEdge(v, u);
  }
  E = m + (ov[0] >> 1);
  if (E & 1) {
    addEdge(1, 1);
    addEdge(1, 1);
    E++;
  }
  for (i = (1); i <= (n); i++) {
    curr[i] = hed[i];
  }
  printf("%d\n", E);
  Euler(1);
  for (i = (1); i <= (ans[0]); i++) {
    if (i & 1) {
      printf("%d %d\n", e[ans[i]].ed, e[ans[i] ^ 1].ed);
    } else {
      printf("%d %d\n", e[ans[i] ^ 1].ed, e[ans[i]].ed);
    }
  }
  return 0;
}
