#include <bits/stdc++.h>
using namespace std;
long long power(long long x, long long y, long long mod) {
  long long res = 1;
  while (y) {
    if (y & 1) res = res * x % mod;
    x = x * x % mod;
    y >>= 1;
  }
  return res;
}
const int nn = 500010;
vector<int> vec;
vector<pair<int, int> > e[nn], res;
int v[nn], di[nn];
int N, M;
void dfs(int x) {
  for (int i = di[x]; i < ((int)e[x].size()); i = di[x]) {
    di[x]++;
    int j = e[x][i].first, k = e[x][i].second;
    if (v[k]) continue;
    v[k] = 1;
    dfs(j);
    res.push_back(make_pair(j, x));
  }
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[x].push_back(make_pair(y, i));
    e[y].push_back(make_pair(x, i));
  }
  for (int i = 1; i <= N; ++i)
    if (((int)e[i].size()) & 1) vec.push_back(i);
  for (int i = 0; i <= ((int)vec.size()) / 2 - 1; ++i) {
    int x = vec[i * 2], y = vec[i * 2 + 1];
    M++;
    e[x].push_back(make_pair(y, M));
    e[y].push_back(make_pair(x, M));
  }
  if (M & 1) e[1].push_back(make_pair(1, ++M));
  dfs(1);
  cout << ((int)res.size()) << endl;
  for (int i = 0; i <= ((int)res.size()) - 1; ++i) {
    if (i & 1)
      printf("%d %d\n", res[i].first, res[i].second);
    else
      printf("%d %d\n", res[i].second, res[i].first);
  }
  return 0;
}
