#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 77, Mod = 1e9 + 7;
int n, m, from[N], to[N], idx, Mv[N];
vector<int> a[N], odds, A;
bool M[N];
void dfs(int v) {
  while (Mv[v] < a[v].size()) {
    int id = a[v][Mv[v]];
    int u = from[id] + to[id] - v;
    Mv[v]++;
    if (!M[id]) {
      M[id] = true;
      dfs(u);
    }
  }
  A.push_back(v);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    ++idx;
    cin >> from[idx] >> to[idx];
    a[from[idx]].push_back(idx);
    a[to[idx]].push_back(idx);
  }
  for (int i = 1; i <= n; i++) {
    if ((int)a[i].size() & 1) odds.push_back(i);
  }
  for (int i = 1; i < odds.size(); i += 2) {
    ++idx;
    from[idx] = odds[i];
    to[idx] = odds[i - 1];
    a[odds[i]].push_back(idx);
    a[odds[i - 1]].push_back(idx);
  }
  if (idx & 1) {
    ++idx;
    from[idx] = to[idx] = 1;
    a[1].push_back(idx);
    a[1].push_back(idx);
  }
  cout << idx << '\n';
  dfs(1);
  for (int i = 1; i < A.size(); i++) {
    int F = i - 1, S = i;
    if (i & 1) swap(F, S);
    cout << A[S] << ' ' << A[F] << '\n';
  }
  return 0;
}
