#include <bits/stdc++.h>
using namespace std;
const int NN = 100000 + 117;
const int MM = 200000 + 117;
int read() {
  int fl = 1, x;
  char c;
  for (c = getchar(); (c < '0' || c > '9') && c != '-'; c = getchar())
    ;
  if (c == '-') {
    fl = -1;
    c = getchar();
  }
  for (x = 0; c >= '0' && c <= '9'; c = getchar())
    x = (x << 3) + (x << 1) + c - '0';
  return x * fl;
}
void open() { freopen("a.in", "r", stdin); }
void close() {
  fclose(stdin);
  fclose(stdout);
}
int m, n;
struct edge {
  int to, id;
};
vector<edge> p[NN] = {};
int st[NN] = {};
int deg[NN] = {};
int vis[MM + NN] = {};
int now = 0;
void dfs(int x) {
  for (int &i = st[x]; i < p[x].size(); ++i) {
    if (!vis[p[x][i].id]) {
      vis[p[x][i].id] = 1;
      int cur = p[x][i].to;
      dfs(cur);
      now ^= 1;
      int a = x, b = cur;
      if (now) swap(a, b);
      printf("%d %d\n", a, b);
    }
  }
}
int main() {
  n = read();
  m = read();
  for (int i = 1; i <= m; ++i) {
    int x = read(), y = read();
    edge tp;
    tp.id = i;
    tp.to = y;
    p[x].push_back(tp);
    tp.to = x;
    p[y].push_back(tp);
    deg[x] ^= 1;
    deg[y] ^= 1;
  }
  int pt = 0;
  for (int i = 1; i <= n; ++i) {
    if (deg[i]) {
      if (pt) {
        edge tp;
        tp.id = ++m;
        tp.to = pt;
        p[i].push_back(tp);
        tp.to = i;
        p[pt].push_back(tp);
        pt = 0;
      } else
        pt = i;
    }
  }
  if (m & 1) {
    edge tp;
    tp.id = ++m;
    tp.to = 1;
    p[1].push_back(tp);
  }
  printf("%d\n", m);
  dfs(1);
  close();
  return 0;
}
