#include <bits/stdc++.h>
using namespace std;
multiset<int> adj[100001];
vector<int> ans;
inline void add_edge(int u, int v) {
  adj[u].insert(v);
  adj[v].insert(u);
}
void euler(int s) {
  while (!adj[s].empty()) {
    int i = *(adj[s].begin());
    adj[s].erase(adj[s].begin());
    adj[i].erase(adj[i].find(s));
    euler(i);
  }
  ans.push_back(s);
}
int main() {
  ios::sync_with_stdio(false);
  int nv, ne;
  cin >> nv >> ne;
  for (int i = 0; i < ne; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].insert(b);
    adj[b].insert(a);
  }
  int last_single = -1, cnt_add = 0;
  for (int i = 1; i <= nv; i++) {
    int degree = adj[i].size();
    if (degree % 2 == 1) {
      if (last_single < 0)
        last_single = i;
      else {
        add_edge(last_single, i);
        last_single = -1;
        cnt_add++;
      }
    }
  }
  if ((ne + cnt_add) & 1) {
    add_edge(1, 1);
    cnt_add++;
  }
  cout << ne + cnt_add << endl;
  euler(1);
  for (int i = 1; i < ans.size(); i++) {
    if (i & 1)
      cout << ans[i - 1] << " " << ans[i] << endl;
    else
      cout << ans[i] << " " << ans[i - 1] << endl;
  }
  return 0;
}
