#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1e9 + 7;
template <typename S, typename T>
inline bool Min(S &a, const T &b) {
  return a > b ? a = b, true : false;
}
template <typename S, typename T>
inline bool Max(S &a, const T &b) {
  return a < b ? a = b, true : false;
}
template <typename S, typename T>
inline void Adm(S &a, const T &b) {
  a = (a + b) % MOD;
  if (a < 0) a += MOD;
}
const int N = 1e6 + 100;
int d[N], r[N];
int main() {
  vector<pair<int, int>> e, p;
  int n, m, cnt = 0;
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    e.push_back({u, v}), ++d[u], ++d[v];
  }
  srand(time(NULL));
  random_shuffle((e).begin(), (e).end());
  for (int i = 0; i < m; ++i) {
    int u = e[i].first, v = e[i].second;
    if (d[u] - r[u] - 1 >= (d[u] + 1) / 2 &&
        d[v] - r[v] - 1 >= (d[v] + 1) / 2 && (n + m + 1) / 2 <= m - cnt)
      ++r[u], ++r[v], ++cnt;
    else
      p.push_back(e[i]);
  }
  cout << ((int)(p).size()) << endl;
  for (auto it : p) printf("%d %d\n", it.first, it.second);
  return 0;
}
