#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  cin >> n >> m;
  vector<vector<int> > edge(n + 1, vector<int>());
  for (int i = 0; i < m; ++i) {
    int a, b;
    cin >> a >> b;
    edge[a].push_back(b);
    edge[b].push_back(a);
  }
  priority_queue<pair<int, int> > pq;
  int req = ((n + m) / 2.0 + 0.6);
  int deg[n + 1], left[n + 1];
  for (int i = 1; i <= n; ++i) {
    pq.push(pair<int, int>(edge[i].size(), i));
    deg[i] = edge[i].size();
    left[i] = deg[i];
  }
  while (m > req) {
    pair<int, int> cur = pq.top();
    pq.pop();
    int v = cur.second;
    for (int i = 0; i < edge[v].size(); ++i) {
      if (left[v] == (int)(deg[v] / 2.0 + 0.6)) break;
      int u = edge[v][i];
      if (u == -1) continue;
      if (left[u] > (int)(deg[u] / 2.0 + 0.6)) {
        edge[v][i] = -1;
        for (int j = 0; j < edge[u].size(); ++j) {
          if (edge[u][j] == v) {
            edge[u][j] = -1;
            break;
          }
        }
        left[u]--;
        left[v]--;
        m--;
        if (m <= req) break;
      }
    }
  }
  cout << m << "\n";
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j < edge[i].size(); ++j) {
      if (edge[i][j] == -1 or i < edge[i][j]) continue;
      cout << i << " " << edge[i][j] << "\n";
    }
  }
}
