#include <bits/stdc++.h>
using namespace std;
const int limit = 1000005;
int n, m;
unordered_set<int> g[limit];
vector<pair<int, int> > sol;
void gensoleven(int u, int add) {
  unordered_set<int> &ar = g[u];
  if (int(ar.size()) % 2 == 0) return;
  int v = *ar.begin();
  ar.erase(v);
  g[v].erase(u);
  if (add) sol.push_back(pair<int, int>(u, v));
  gensoleven(v, 1 - add);
}
void gensoleven(int u) {
  unordered_set<int> &ar = g[u];
  if (int(ar.size()) == 0) return;
  int v = *ar.begin();
  ar.erase(v);
  g[v].erase(u);
  sol.push_back(pair<int, int>(u, v));
  gensoleven(v, 0);
  return;
}
void gensolodd(int u, int p, int add) {
  unordered_set<int> &ar = g[u];
  if (int(ar.size()) % 2 == 0) {
    if (add) sol.push_back(pair<int, int>(u, p));
    return;
  }
  int v = *ar.begin();
  ar.erase(v);
  g[v].erase(u);
  if (add) sol.push_back(pair<int, int>(u, v));
  gensolodd(v, u, 1 - add);
}
void gensolodd(int u) {
  unordered_set<int> &ar = g[u];
  int v = *ar.begin();
  ar.erase(v);
  g[v].erase(u);
  sol.push_back(pair<int, int>(u, v));
  gensolodd(v, u, 0);
  return;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    g[u].insert(v);
    g[v].insert(u);
  }
  for (int u = 1; u <= n; u++)
    if (int(g[u].size()) % 2) gensolodd(u);
  for (int u = 1; u <= n; u++) gensoleven(u);
  cout << int(sol.size()) << endl;
  for (int i = 0; i < int(sol.size()); i++) {
    pair<int, int> p = sol[i];
    cout << p.first << " " << p.second << endl;
  }
}
