#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const int maxn = 1e6 + 5;
class Edge {
 public:
  int u, v, id;
};
int n, m, ans = 0;
int deg[maxn], ori[maxn];
bool used[maxn];
Edge ed[maxn];
inline bool cmp(const Edge &p, const Edge &q) {
  return max(deg[p.u], deg[p.v]) < max(deg[q.u], deg[q.v]);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (0); i < (m); ++i) {
    scanf("%d%d", &ed[i].u, &ed[i].v);
    ++deg[ed[i].u], ++deg[ed[i].v];
    ed[i].id = i;
  }
  for (int i = (0); i < (m); ++i) {
    if (deg[ed[i].u] < deg[ed[i].v]) swap(ed[i].u, ed[i].v);
  }
  sort(ed, ed + m, cmp);
  for (int i = (1); i <= (n); ++i) ori[i] = deg[i];
  for (int i = m - 1; i >= 0; --i) {
    if (deg[ed[i].u] - 1 >= (ori[ed[i].u] + 1) / 2 &&
        deg[ed[i].v] - 1 >= (ori[ed[i].v] + 1) / 2) {
      --deg[ed[i].u];
      --deg[ed[i].v];
      used[i] = 1;
      ++ans;
    }
    if (ans >= m - (n + m + 1) / 2) break;
  }
  assert(ans >= m - (n + m + 1) / 2);
  printf("%d\n", m - ans);
  for (int i = (0); i < (m); ++i)
    if (!used[i]) printf("%d %d\n", ed[i].u, ed[i].v);
  return 0;
}
