#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, M = 3e5 + 10;
int n, m, u, v, lst, d[N], hed[N], s[M], ed, tp, cnt;
bool vis[M], ban[N];
struct edge {
  int to, nex;
  edge(int _ = 0, int __ = 0) : to(_), nex(__) {}
} e[M << 1];
inline void add(int u, int v) {
  e[++ed] = edge(v, hed[u]);
  hed[u] = ed;
}
void dfs(int u) {
  ban[u] = 1;
  for (int &i = hed[u], v = e[i].to; i; i = e[i].nex, v = e[i].to)
    if (!vis[i + 1 >> 1]) vis[i + 1 >> 1] = 1, dfs(v);
  s[tp++] = u;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (1); i <= (m); ++i)
    scanf("%d%d", &u, &v), add(u, v), add(v, u), ++d[u], ++d[v];
  for (int i = (1); i <= (n); ++i)
    if (d[i] & 1) lst ? (add(lst, i), add(i, lst), ++cnt, lst = 0) : (lst = i);
  m += cnt;
  if (m & 1) add(1, 1), add(1, 1), ++m;
  printf("%d\n", m);
  for (int i = (1); i <= (n); ++i)
    if (!ban[i]) {
      tp = 0;
      dfs(i);
      for (int j = (0); j <= (tp - 2); ++j)
        if (j & 1)
          printf("%d %d\n", s[j + 1], s[j]);
        else
          printf("%d %d\n", s[j], s[j + 1]);
    }
  return 0;
}
