#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  long long r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
int const nmax = 200010;
int n, m;
vector<int> adj[nmax];
map<pair<int, int>, int> mp;
vector<int> ans;
void euler(int u) {
  while (!adj[u].empty()) {
    int v = adj[u].back();
    adj[u].pop_back();
    if (mp[pair<int, int>(u, v)]) {
      mp[pair<int, int>(u, v)]--;
      mp[pair<int, int>(v, u)]--;
      euler(v);
    }
  }
  ans.push_back(u);
}
void solve() {
  cin >> n >> m;
  while (m--) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    adj[x].push_back(y);
    adj[y].push_back(x);
    mp[pair<int, int>(x, y)]++;
    mp[pair<int, int>(y, x)]++;
  }
  vector<int> d;
  for (int i = 0; i < n; i++) {
    if (int((adj[i]).size()) % 2) d.push_back(i);
  }
  while (int((d).size())) {
    int x = d.back();
    d.pop_back();
    int y = d.back();
    d.pop_back();
    adj[x].push_back(y);
    adj[y].push_back(x);
    mp[pair<int, int>(x, y)]++;
    mp[pair<int, int>(y, x)]++;
  }
  euler(0);
  if (int((ans).size()) % 2 == 0) ans.push_back(0);
  cout << ans.size() - 1 << "\n";
  bool st = true;
  for (int i = 1; i < int((ans).size()); i++) {
    if (st)
      cout << ans[i - 1] + 1 << " " << ans[i] + 1 << "\n";
    else
      cout << ans[i] + 1 << " " << ans[i - 1] + 1 << "\n";
    st = !st;
  }
}
int main() {
  solve();
  return 0;
}
