#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:1000000000")
static vector<vector<int> > vc;
static vector<pair<int, int> > re;
static int m1[1000000], m2[1000000], us[1000000], us1[1000000];
void dfs(int cu, int pr) {
  us[cu] = 1;
  int a;
  for (int i = 0; i < vc[cu].size(); ++i)
    if (us[vc[cu][i]]) {
      a = vc[cu][i];
      if (a == pr || us1[a]) continue;
      ++m1[a];
      ++m2[cu];
      re.push_back(make_pair(cu + 1, a + 1));
    } else
      dfs(vc[cu][i], cu);
  us1[cu] = 1;
  if (cu == pr && m1[cu] % 2 && m2[cu] % 2) {
    ++m1[cu], ++m2[cu];
    re.push_back(make_pair(cu + 1, cu + 1));
  }
  if (cu == pr) return;
  for (int i = 0; i < vc[cu].size(); ++i)
    if (vc[cu][i] == pr) {
      if (m1[cu] % 2) {
        ++m1[cu];
        ++m2[pr];
        re.push_back(make_pair(pr + 1, cu + 1));
      } else {
        ++m2[cu];
        ++m1[pr];
        re.push_back(make_pair(cu + 1, pr + 1));
      }
    }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, m, a, b;
  cin >> n >> m;
  vc.resize(n);
  for (int i = 0; i < m; ++i) {
    cin >> a >> b;
    --a, --b;
    if (a != b) {
      vc[a].push_back(b);
      vc[b].push_back(a);
    } else {
      ++m1[a], ++m2[a];
      re.push_back(make_pair(a + 1, a + 1));
    }
  }
  vector<int> vc1;
  for (int i = 0; i < n; ++i)
    if (vc[i].size() % 2) {
      vc1.push_back(i);
    }
  for (int i = 1; i < vc1.size(); i += 2) {
    vc[vc1[i]].push_back(vc1[i - 1]);
    vc[vc1[i - 1]].push_back(vc1[i]);
  }
  if (vc1.size() & 1)
    dfs(vc1[vc1.size() - 1], vc1[vc1.size() - 1]);
  else
    dfs(0, 0);
  cout << re.size() << endl;
  for (int i = 0; i < re.size(); ++i)
    cout << re[i].first << ' ' << re[i].second << '\n';
  return 0;
}
