#include <bits/stdc++.h>
using namespace std;
const int maxn = 400005;
inline int gi() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while ('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
  return sum;
}
int n, m;
vector<int> vec;
struct edge {
  int to, next;
} e[maxn * 2];
int h[maxn], tot = 1, vis[maxn], cnt, deg[maxn];
inline void add(int u, int v) {
  e[++tot] = (edge){v, h[u]};
  h[u] = tot;
  ++deg[u];
  e[++tot] = (edge){u, h[v]};
  h[v] = tot;
  ++deg[v];
}
void dfs(int u) {
  for (int &i = h[u]; i; i = e[i].next) {
    if (vis[i >> 1]) continue;
    vis[i >> 1] = 1;
    int v = e[i].to;
    dfs(v);
    if ((++cnt) & 1)
      printf("%d %d\n", u, v);
    else
      printf("%d %d\n", v, u);
  }
}
int main() {
  n = gi();
  m = gi();
  for (int i = 1; i <= m; ++i) add(gi(), gi());
  for (int i = 1; i <= n; ++i)
    if (deg[i] & 1) vec.push_back(i);
  for (int i = 0; i < vec.size(); i += 2) add(vec[i], vec[i + 1]), ++m;
  if (m & 1) add(1, 1), ++m;
  printf("%d\n", m);
  dfs(1);
  return 0;
}
