#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100001;
int n, m;
vector<int> tour;
stack<int> to_visit;
unordered_multiset<int> g[MAXN];
stack<int> odd;
void hier(int v) {
  to_visit.push(v);
  while (((int)to_visit.size())) {
    v = to_visit.top();
    if (!((int)g[v].size())) {
      tour.push_back(v);
      to_visit.pop();
    } else {
      int u = *g[v].begin();
      to_visit.push(u);
      g[v].erase(g[v].find(u));
      g[u].erase(g[u].find(v));
    }
  }
}
int main() {
  cin >> n >> m;
  int u, v;
  for (int i = 0; i < m; i++) {
    cin >> u >> v;
    g[u].insert(v);
    g[v].insert(u);
  }
  for (int i = 1; i <= n; i++) {
    if (((int)g[i].size()) % 2) {
      odd.push(i);
    }
    if (((int)odd.size()) == 2) {
      int u, v;
      u = odd.top();
      odd.pop();
      v = odd.top();
      odd.pop();
      g[u].insert(v);
      g[v].insert(u);
    }
  }
  hier(1);
  cout << (((int)tour.size()) % 2 ? ((int)tour.size()) - 1 : ((int)tour.size()))
       << endl;
  int rev = 0;
  for (int i = 0; i < ((int)tour.size()) - 1; i++) {
    if (rev)
      cout << tour[i + 1] << " " << tour[i] << endl;
    else
      cout << tour[i] << " " << tour[i + 1] << endl;
    rev = 1 - rev;
  }
  if (rev) cout << tour.back() << " " << tour.back() << endl;
  return 0;
}
