#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 500005;
multiset<int> gr[N];
vector<int> path;
void GetEulerCircuit(int u) {
  while (!gr[u].empty()) {
    int v = *gr[u].begin();
    gr[u].erase(gr[u].begin());
    gr[v].erase(gr[v].find(u));
    GetEulerCircuit(v);
  }
  path.push_back(u);
}
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    gr[u].insert(v);
    gr[v].insert(u);
  }
  int v = 0;
  for (int u = 1; u <= n; u++) {
    if (gr[u].size() % 2) {
      if (v == 0) {
        v = u;
      } else {
        gr[u].insert(v);
        gr[v].insert(u);
        m++;
        v = 0;
      }
    }
  }
  if (m % 2) {
    gr[1].insert(1);
    gr[1].insert(1);
    m++;
  }
  GetEulerCircuit(1);
  cout << m << "\n";
  for (int i = 0; i < m; i++) {
    int u = path[i], v = path[i + 1];
    if (i % 2) {
      swap(u, v);
    }
    cout << u << " " << v << "\n";
  }
}
