#include <bits/stdc++.h>
using namespace std;
const int max_n = 100001, max_m = 500001;
int n, m;
int deg[max_n];
vector<int> neigh[max_n];
int st[max_m], ed[max_m];
bool hot[max_n] = {0};
bool vis[max_n] = {0};
bool flag = 0;
void dfs(int v) {
  if (hot[v]) {
    flag = !flag;
    hot[v] = 0;
  }
  vis[v] = 1;
  for (int i = 0; i < int(neigh[v].size()); i++) {
    int e = neigh[v][i];
    int nv = st[e] + ed[e] - v;
    if (!vis[nv]) {
      if (flag) swap(st[e], ed[e]);
      dfs(nv);
      if (flag) swap(st[e], ed[e]);
    }
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int s, e;
    cin >> s >> e;
    s--;
    e--;
    deg[s]++;
    deg[e]++;
    neigh[s].push_back(i);
    neigh[e].push_back(i);
    st[i] = s;
    ed[i] = e;
  }
  for (int i = 0; i < n; i++)
    if (deg[i] % 2) {
      int j = i + 1;
      while (deg[j] % 2 == 0) j++;
      deg[i]++;
      deg[j]++;
      neigh[i].push_back(m);
      neigh[j].push_back(m);
      st[m] = i;
      ed[m] = j;
      m++;
      i = j;
    }
  if (m % 2) {
    deg[0]++;
    deg[0]++;
    neigh[0].push_back(m);
    neigh[0].push_back(m);
    st[m] = 0;
    ed[m] = 0;
    m++;
  }
  for (int i = 0; i < m; i++) hot[ed[i]] = !hot[ed[i]];
  dfs(0);
  for (int i = 0; i < m; i++) deg[st[i]]++;
  for (int i = 0; i < n; i++) deg[i] % 2 == 0;
  for (int i = 0; i < m; i++) deg[ed[i]]++;
  for (int i = 0; i < n; i++) deg[i] % 2 == 0;
  cout << m << endl;
  for (int i = 0; i < m; i++) cout << st[i] + 1 << " " << ed[i] + 1 << endl;
  return 0;
}
