#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v[100001];
int self[100001], grad[100001], viz[600005];
stack<int> s;
vector<int> rasp;
int main() {
  int n, m, x, y, last = 0, total;
  cin >> n >> m;
  total = m;
  for (int i = 1; i <= m; i++) {
    cin >> x >> y;
    if (x == y) self[x]++;
    v[x].push_back({y, i});
    if (x != y) v[y].push_back({x, i});
    grad[x]++;
    grad[y]++;
  }
  for (int i = 1; i <= n; i++)
    if (grad[i] % 2 == 1) {
      if (last == 0)
        last = i;
      else {
        v[last].push_back({i, ++total});
        v[i].push_back({last, total});
        grad[i]++;
        grad[last]++;
        last = 0;
      }
    }
  s.push(1);
  while (!s.empty()) {
    int i = s.top();
    if (v[i].size()) {
      x = v[i].back().first;
      y = v[i].back().second;
      v[i].pop_back();
      if (!viz[y]) {
        viz[y] = 1;
        s.push(x);
      }
    } else {
      s.pop();
      rasp.push_back(i);
    }
  }
  rasp.pop_back();
  if (rasp.size() % 2 == 0) {
    cout << total << '\n';
    int a = *rasp.rbegin(), last = 0;
    for (auto el : rasp) {
      if (last == 0)
        cout << a << " " << el << '\n';
      else
        cout << el << " " << a << '\n';
      last = 1 - last;
      a = el;
    }
  } else {
    cout << total + 1 << '\n';
    rasp.push_back(*rasp.rbegin());
    int a = *rasp.rbegin(), last = 0;
    for (auto el : rasp) {
      if (last == 0)
        cout << a << " " << el << '\n';
      else
        cout << el << " " << a << '\n';
      last = 1 - last;
      a = el;
    }
  }
  return 0;
}
