#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using ld = long double;
using D = double;
using vi = vector<int>;
using vii = vector<ii>;
using vvi = vector<vi>;
using vs = vector<string>;
template <typename T>
T abs(T x) {
  return x < 0 ? -x : x;
}
template <typename T>
T sgn(T x) {
  return x < 0 ? -1 : (x > 0 ? 1 : 0);
}
template <typename T>
T sqr(T x) {
  return x * x;
}
template <typename T>
T gcd(T a, T b) {
  return a ? gcd(b % a, a) : b;
}
int n;
int m;
vii v[1000000];
vi w[1000000];
int was[1000000];
int ea[1000000];
int eb[1000000];
int cnt[1000000];
vi g;
int go(int x, int c) {
  g.push_back(x);
  was[x] = 1;
  for (auto y : w[x])
    if (!was[y]) go(y, c ^ 1);
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    v[a].push_back(make_pair(b, i));
    v[b].push_back(make_pair(a, i));
    ea[i] = a;
    eb[i] = b;
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j + 1 < ((int)(v[i]).size()); j += 2) {
      w[v[i][j].second].push_back(v[i][j + 1].second);
      w[v[i][j + 1].second].push_back(v[i][j].second);
    }
  vi res;
  for (int i = 0; i < m; i++)
    if (!was[i] && ((int)(w[i]).size()) < 2) {
      g.clear();
      go(i, 0);
      for (int j = 0; j < ((int)(g).size()); j += 2) res.push_back(g[j]);
      if (((int)(g).size()) > 1 && ((int)(g).size()) % 2 == 0)
        res.push_back(g.back());
    }
  for (int i = 0; i < m; i++)
    if (!was[i]) {
      g.clear();
      go(i, 0);
      for (int j = 0; j < ((int)(g).size()); j += 2) res.push_back(g[j]);
    }
  printf("%d\n", ((int)(res).size()));
  for (auto x : res) {
    printf("%d %d\n", ea[x] + 1, eb[x] + 1);
    cnt[ea[x]]++;
    cnt[eb[x]]++;
  }
  return 0;
}
