#include <bits/stdc++.h>
using namespace std;
bool debug = 1;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
vector<pair<int, int>> ans, mp[1000005];
vector<int> A;
bool vis[1000005];
void dfs(int x) {
  while (!mp[x].empty()) {
    auto p = mp[x].back();
    mp[x].pop_back();
    if (vis[p.second]) continue;
    vis[p.second] = 1;
    dfs(p.first);
  }
  A.push_back(x);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, u, v; i <= m; i++) {
    scanf("%d%d", &u, &v);
    mp[u].push_back({v, i});
    mp[v].push_back({u, i});
  }
  vector<int> tmp;
  for (int(i) = 1; (i) <= (int)(n); (i)++)
    if (mp[i].size() % 2 == 1) {
      tmp.push_back(i);
    }
  assert(tmp.size() % 2 == 0);
  while (!tmp.empty()) {
    int x = tmp.back();
    tmp.pop_back();
    int y = tmp.back();
    tmp.pop_back();
    m++;
    mp[x].push_back({y, m});
    mp[y].push_back({x, m});
  }
  if (m & 1) {
    mp[1].push_back({1, ++m});
  }
  dfs(1);
  reverse(A.begin(), A.end());
  for (int i = 0; i + 1 < A.size(); i++) {
    if (i % 2 == 0)
      ans.push_back({A[i], A[i + 1]});
    else
      ans.push_back({A[i + 1], A[i]});
  }
  printf("%d\n", ans.size());
  for (auto p : ans) printf("%d %d\n", p.first, p.second);
  return 0;
}
