#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int maxm = 1000010;
int n, m;
int Link[maxm], head[maxn];
pair<int, int> e[maxm];
int deg[maxn];
vector<int> ans;
int vis[maxm];
void dfs(int u) {
  for (int &i = head[u]; i; i = Link[i]) {
    if (!vis[i]) {
      vis[i] = 1;
      if (i > m)
        vis[i - m] = 1;
      else
        vis[i + m] = 1;
      dfs(e[i].second);
    }
  }
  ans.push_back(u);
}
int main() {
  ans.push_back(0);
  scanf("%d%d", &n, &m);
  for (int i = (1), _b = (m); i <= _b; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    e[i] = pair<int, int>(u, v);
    deg[u]++;
    deg[v]++;
  }
  int last = 0;
  for (int i = (1), _b = (n); i <= _b; ++i) {
    if (deg[i] & 1) {
      if (!last) {
        last = i;
      } else {
        e[++m] = pair<int, int>(last, i);
        last = 0;
      }
    }
  }
  if (m & 1) {
    e[++m] = pair<int, int>(1, 1);
  }
  for (int i = (1), _b = (m); i <= _b; ++i) {
    e[i + m] = pair<int, int>(e[i].second, e[i].first);
  }
  for (int i = (1), _b = (2 * m); i <= _b; ++i) {
    Link[i] = head[e[i].first];
    head[e[i].first] = i;
  }
  dfs(1);
  printf("%d\n", m);
  for (int i = (1), _b = (m); i <= _b; ++i) {
    if (i & 1) {
      printf("%d %d\n", ans[i], ans[i + 1]);
    } else {
      printf("%d %d\n", ans[i + 1], ans[i]);
    }
  }
  return 0;
}
