#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = 0;
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ '0');
  if (f) return x;
  return -x;
}
const int N = 1e5;
const int M = 2.5e5;
struct AEdge {
  int u, v;
} ae[M + 3];
struct Edge {
  int u, v, nxt;
} e[(M << 1) + 3];
int fe[N + 3];
int dgr[N + 3];
int ans[M + 3];
int vis[M + 3];
int n, m, en, tp;
void addedge(int u, int v) {
  en++;
  e[en].v = v;
  e[en].u = u;
  e[en].nxt = fe[u];
  fe[u] = en;
}
void dfs(int u) {
  for (int i = fe[u]; i; i = fe[u]) {
    fe[u] = e[i].nxt;
    if (vis[i >> 1]) continue;
    vis[i >> 1] = true;
    dfs(e[i].v);
    ans[++tp] = i;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  en = 1;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &ae[i].u, &ae[i].v);
    dgr[ae[i].u]++;
    dgr[ae[i].v]++;
  }
  int tmp = 0;
  for (int i = 1; i <= n; i++) {
    if (dgr[i] & 1) {
      if (tmp == 0) {
        tmp = i;
      } else {
        ae[++m].u = tmp, ae[m].v = i;
        tmp = 0;
      }
    }
  }
  if (m & 1) {
    ae[++m].u = 1, ae[m].v = 1;
  }
  for (int i = 1; i <= m; i++) {
    addedge(ae[i].u, ae[i].v);
    addedge(ae[i].v, ae[i].u);
  }
  dfs(ae[1].v);
  printf("%d\n", m);
  for (int i = 1; i <= tp; i++) {
    if (i & 1)
      printf("%d %d\n", e[ans[i]].v, e[ans[i]].u);
    else
      printf("%d %d\n", e[ans[i]].u, e[ans[i]].v);
  }
  return 0;
}
