#include <bits/stdc++.h>
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
long long read() {
  long long x = 0, f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -1;
  for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  return x * f;
}
void write(long long x) {
  if (x < 0) x = -x, putchar('-');
  if (x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
void writeln(long long x) {
  write(x);
  puts("");
}
const int N = 500000;
int E[N], X[N], R[N], D[N];
int u[N], v[N];
bool b[N];
int i, m, n, t, w, x, y, S_E;
inline void A_E(int x, int y) {
  S_E++, E[S_E] = y, X[S_E] = R[x], R[x] = S_E, D[x]++;
  return;
}
inline int O_E(int x) { return ((x - 1) ^ 1) + 1; }
inline void dfs(int x) {
  for (int i = R[x]; R[x] = X[i], i != 0; i = R[x])
    if (!b[i]) {
      b[i] = true, b[O_E(i)] = true;
      dfs(E[i]);
      w++, u[w] = x, v[w] = E[i];
    }
  return;
}
int main() {
  n = read(), m = read();
  for (i = 1; i <= m; i++) {
    x = read(), y = read();
    A_E(x, y), A_E(y, x);
  }
  for (i = 1; i <= n; i++)
    if (D[i] & 1)
      if (t)
        m++, A_E(i, t), A_E(t, i), t = 0;
      else
        t = i;
  if (m & 1) m++, A_E(1, 1), A_E(1, 1);
  writeln(m);
  dfs(1);
  for (i = w; i > 0; i--)
    if (!(i & 1))
      printf("%d %d\n", u[i], v[i]);
    else
      printf("%d %d\n", v[i], u[i]);
  return 0;
}
