#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1e9 + 7;
template <typename S, typename T>
inline bool Min(S &a, const T &b) {
  return a > b ? a = b, true : false;
}
template <typename S, typename T>
inline bool Max(S &a, const T &b) {
  return a < b ? a = b, true : false;
}
template <typename S, typename T>
inline void Adm(S &a, const T &b) {
  a = (a + b) % MOD;
  if (a < 0) a += MOD;
}
const int N = 1e6 + 100;
int d[N];
struct edge {
  int v, en, nxt;
} e[N * 4];
int h[N], idx;
inline void addedge(int u, int v) {
  e[idx] = {v, 1, h[u]};
  h[u] = idx++;
  e[idx] = {u, 1, h[v]};
  h[v] = idx++;
}
vector<pair<int, int>> vec, ans;
bool vis[N], rem[N * 4];
void DFS(int u) {
  vis[u] = 1;
  for (int i = h[u]; ~i; i = h[u]) {
    h[u] = e[i].nxt;
    if (e[i].en) {
      e[i].en = e[i ^ 1].en = 0;
      DFS(e[i].v);
      vec.push_back({u, e[i].v});
    }
  }
}
int main() {
  memset(h, -1, sizeof(h));
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    addedge(u, v);
    ++d[u], ++d[v];
  }
  for (int i = 1; i <= n; ++i)
    if (d[i] & 1) addedge(0, i);
  for (int i = 1; i <= n; ++i)
    if (!vis[i]) {
      vec.clear();
      DFS(i);
      for (int i = 0; i < ((int)(vec).size()); ++i)
        if (i % 2 == 0) {
          if (vec[i].first && vec[i].second) ans.push_back(vec[i]);
        } else {
          if (vec[i].first && vec[i].second) {
            if ((!vec[i - 1].first || !vec[i - 1].second) && !rem[i - 1])
              ans.push_back(vec[i]), rem[i - 1] = 1;
            else if (i + 1 < ((int)(vec).size()) &&
                     (!vec[i + 1].first || !vec[i + 1].second) && !rem[i + 1])
              ans.push_back(vec[i]), rem[i + 1] = 1;
            else
              rem[i] = 1;
          } else
            rem[i] = 1;
        }
    }
  cout << ((int)(ans).size()) << endl;
  for (int i = 0; i < ((int)(ans).size()); ++i)
    printf("%d %d\n", ans[i].first, ans[i].second);
  return 0;
}
