#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
void read(int &x) {
  char ch = getchar();
  x = 0;
  while (!isdigit(ch)) ch = getchar();
  while (isdigit(ch)) x = x * 10 + ch - 48, ch = getchar();
}
const int N = 1e5 + 5, M = 5e5 + 5;
int n, m, vis[M];
int cnt = 1, c[N], h[N], to[M], nxt[M];
void add(int u, int v) { to[++cnt] = v, ++c[v], nxt[cnt] = h[u], h[u] = cnt; }
vector<int> a, res;
void dfs(int u) {
  for (int &i = h[u]; i; i = nxt[i])
    if (!vis[i]) vis[i] = vis[i ^ 1] = 1, dfs(to[i]);
  res.push_back(u);
}
signed main() {
  read(n), read(m);
  for (int i = 1, u, v; i <= m; ++i) read(u), read(v), add(u, v), add(v, u);
  for (int i = 1; i <= n; ++i)
    if (c[i] & 1) a.push_back(i);
  for (int i = 0; i < a.size(); i += 2) {
    int x = a[i], y = a[i + 1];
    add(x, y), add(y, x);
  }
  if (((cnt - 1) >> 1) & 1) add(1, 1), add(1, 1);
  dfs(1);
  printf("%d\n", (cnt - 1) >> 1);
  for (int i = 1; i < res.size(); ++i) {
    if (i & 1)
      printf("%d %d\n", res[i - 1], res[i]);
    else
      printf("%d %d\n", res[i], res[i - 1]);
  }
  return 0;
}
