#include <bits/stdc++.h>
using namespace std;
const int N = 101010;
int n, m, p;
int deg[N], ind[N];
bool vis[N * 5];
vector<pair<int, int> > ans;
vector<pair<int, int> > g[N];
void dfs(int u) {
  while (ind[u] < (int)g[u].size()) {
    if (vis[g[u][ind[u]].second])
      ++ind[u];
    else {
      auto v = g[u][ind[u]];
      vis[v.second] = 1;
      dfs(v.first);
      ans.push_back(make_pair(v.first, u));
    }
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> m;
  for (int i = (1); i < (m + 1); i++) {
    int u, v;
    cin >> u >> v;
    ++deg[u], ++deg[v];
    g[u].push_back(make_pair(v, i));
    g[v].push_back(make_pair(u, i));
  }
  p = m;
  int u = 0;
  for (int v = (1); v < (n + 1); v++)
    if (deg[v] & 1) {
      if (u) {
        ++p;
        g[u].push_back(make_pair(v, p));
        g[v].push_back(make_pair(u, p));
        u = 0;
      } else {
        u = v;
      }
    }
  if (p & 1) {
    ++p;
    g[1].push_back(make_pair(1, p));
    g[1].push_back(make_pair(1, p));
  }
  dfs(1);
  cout << (int)ans.size() << "\n";
  for (int i = (0); i < ((int)ans.size()); i++) {
    int u = ans[i].first, v = ans[i].second;
    if (i & 1) swap(u, v);
    cout << u << " " << v << "\n";
  }
  return 0;
}
