#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
vector<pair<int, int> > vec;
int deg[maxn];
int f[maxn];
bool isok[maxn];
struct Node {
  int u, v, id;
  bool operator<(const Node &rhs) const {
    return min(f[u], f[v]) > min(f[rhs.u], f[rhs.v]);
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    vec.push_back(make_pair(u, v));
    deg[u]++, deg[v]++;
    f[u]++, f[v]++;
  }
  priority_queue<Node> pq;
  for (int i = 0; i < m; ++i) {
    pq.push(Node{vec[i].first, vec[i].second, i});
  }
  int cnt = 0;
  while (!pq.empty()) {
    Node u = pq.top();
    pq.pop();
    int uu = u.u, vv = u.v;
    if ((f[uu] - 1) >= (deg[uu] + 1) / 2 && (f[vv] - 1) >= (deg[vv] + 1) / 2) {
      isok[u.id] = 1;
      --f[uu], --f[vv];
      ++cnt;
    }
  }
  cout << m - cnt << endl;
  for (int i = 0; i < m; ++i) {
    if (isok[i]) {
      continue;
    }
    cout << vec[i].first << ' ' << vec[i].second << endl;
  }
  return 0;
}
