#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read(register T& t) {
  register T f = 1;
  register char ch = getchar();
  t = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') t = t * 10 + ch - '0', ch = getchar();
  t *= f;
  return t;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
const long long p = 998244353;
inline long long power(register long long x, register long long k = p - 2) {
  register long long re = 1;
  for (; k; k >>= 1, x = x * x % p)
    if (k & 1) re = re * x % p;
  return re;
}
int head[3200005], ne[3200005], to[3200005], total = 1;
inline void add(int a, int b) {
  total++;
  to[total] = b;
  ne[total] = head[a];
  head[a] = total;
}
bool vis[3200005];
int deg[3200005];
int st[3200005], st_top;
unsigned int pos;
void dfs(int now) {
  for (int& i = head[now]; i; i = ne[i])
    if (vis[i] == 0) {
      vis[i] = vis[i ^ 1] = 1;
      int v = to[i];
      dfs(v);
      if ((++pos) & 1)
        printf("%d %d\n", v, now);
      else
        printf("%d %d\n", now, v);
    }
}
int n, m;
int main() {
  read(n, m);
  for (int i = 1, x, y; i <= m; i++)
    read(x, y), add(x, y), add(y, x), deg[x]++, deg[y]++;
  for (int i = 1; i <= n; i++)
    if (deg[i] & 1) st[++st_top] = i;
  for (int i = 1; i <= st_top; i += 2)
    m++, add(st[i], st[i + 1]), add(st[i + 1], st[i]);
  if (m & 1) add(1, 1), add(1, 1), m++;
  printf("%d\n", m);
  dfs(1);
  return 0;
}
