#include <bits/stdc++.h>
using namespace std;
void RI() {}
template <typename... T>
void RI(int& head, T&... tail) {
  scanf("%d", &head);
  RI(tail...);
}
const int N = 100010;
const int M = 500010;
struct E {
  int a, b;
} es[M];
int n, m, old_m;
vector<int> e[N];
void add_edge(int a, int b) {
  e[a].push_back(m);
  e[b].push_back(m);
  es[m++] = E{a, b};
}
int loop[N];
void input() {
  RI(n, old_m);
  m = 0;
  for (int i = (1); i <= int(n); i++) e[i].clear();
  for (int i = 0; i < int(old_m); i++) {
    int a, b;
    RI(a, b);
    add_edge(a, b);
  }
}
void build() {
  old_m = m;
  vector<int> odd;
  for (int i = (1); i <= int(n); i++)
    if (((int)(e[i]).size()) % 2 == 1) odd.push_back(i);
  assert(((int)(odd).size()) % 2 == 0);
  for (int i = 0; i < ((int)(odd).size()); i += 2) add_edge(odd[i], odd[i + 1]);
}
vector<int> path;
bool vis[M];
void dfs(int p) {
  while (!e[p].empty()) {
    int i = e[p].back();
    e[p].pop_back();
    if (vis[i]) continue;
    auto& ee = es[i];
    vis[i] = 1;
    dfs(p ^ ee.a ^ ee.b);
  }
  path.push_back(p);
}
int ci[N], co[N];
void solve() {
  for (int i = 0; i < int(m); i++) vis[i] = 0;
  dfs(1);
  for (int i = (1); i <= int(n); i++) assert(e[i].empty());
  assert(path[0] == path.back());
  vector<pair<int, int> > sol;
  for (int i = 0; i < int(((int)(path).size()) - 1); i++) {
    if (i % 2 == 0)
      sol.push_back(make_pair(path[i], path[i + 1]));
    else
      sol.push_back(make_pair(path[i + 1], path[i]));
  }
  for (auto it = (sol).begin(); it != (sol).end(); it++) {
    ci[it->first]++;
    co[it->second]++;
  }
  vector<int> vi, vo;
  for (int i = (1); i <= int(n); i++)
    if (ci[i] % 2 == 1) vi.push_back(i);
  for (int i = (1); i <= int(n); i++)
    if (co[i] % 2 == 1) vo.push_back(i);
  assert(((int)(vi).size()) == ((int)(vo).size()));
  for (int i = 0; i < int(((int)(vi).size())); i++)
    sol.push_back(make_pair(vi[i], vo[i]));
  printf("%d\n", ((int)(sol).size()));
  for (auto it = (sol).begin(); it != (sol).end(); it++)
    printf("%d %d\n", it->first, it->second);
}
int main() {
  input();
  build();
  solve();
  return 0;
}
