#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smax(T &x, T y) {
  x = max((x), (y));
}
template <class T>
inline void smin(T &x, T y) {
  x = min((x), (y));
}
const int MOD = 1e9 + 7;
const int SIZE = 5 * 1e5 + 10;
int n, m;
pair<int, int> edges[SIZE];
bool used[SIZE];
vector<int> g[SIZE / 5];
int deg[SIZE / 5];
int eulertour[SIZE];
int eulersz;
int curedge[SIZE / 5];
int other(int e, int cur) {
  if (edges[e].first == cur) return edges[e].second;
  return edges[e].first;
}
void dfs(int u) {
  while (curedge[u] < ((int)(g[u]).size())) {
    int i = curedge[u];
    if (used[g[u][i]]) {
      curedge[u]++;
      continue;
    }
    used[g[u][i]] = 1;
    int v = other(g[u][i], u);
    curedge[u]++;
    dfs(v);
  }
  eulertour[eulersz++] = u;
}
int main() {
  if (0) {
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
  }
  while (scanf("%d%d", &(n), &(m)) == 2) {
    for (int i = 0; i < (n); ++i) g[i].clear();
    memset((deg), 0, sizeof((deg)));
    for (int i = 0; i < (m); ++i) {
      int a, b;
      scanf("%d%d", &a, &b);
      a--;
      b--;
      deg[a]++;
      deg[b]++;
      edges[i] = make_pair(a, b);
      g[a].push_back(i);
      g[b].push_back(i);
    }
    vector<int> oddies;
    for (int i = 0; i < (n); ++i)
      if (deg[i] & 1) oddies.push_back(i);
    for (int i = 0; i < (((int)(oddies).size())); ++i) {
      if (i + 1 >= ((int)(oddies).size())) break;
      int u = oddies[i];
      int v = oddies[i + 1];
      edges[m] = make_pair(u, v);
      g[u].push_back(m);
      g[v].push_back(m);
      deg[u]++;
      deg[v]++;
      m++;
      i++;
    }
    if (m & 1) {
      edges[m++] = make_pair(0, 0);
      g[0].push_back(m - 1);
      deg[0] += 2;
    }
    eulersz = 0;
    memset((used), 0, sizeof((used)));
    memset((curedge), 0, sizeof((curedge)));
    dfs(0);
    printf("%d\n", m);
    for (int i = 0; i < (eulersz - 1); ++i) {
      int u = eulertour[i] + 1, v = eulertour[i + 1] + 1;
      if (i & 1) swap(u, v);
      printf("%d %d\n", u, v);
    }
  }
  return 0;
}
