#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
const int INF = 0x7fffffff;
const long long linf = 1LL << 60;
const int N = 100000;
const int M = 500000;
pair<int, int> edge[M + 5];
int n, m;
vector<int> g[N + 5];
int head[N + 5];
int d[N + 5];
void input() {
  scanf("%d %d", &n, &m);
  for (int i = (1), i_end_ = (n + 1); i < i_end_; ++i) d[i] = 0;
  for (int i = (0), i_end_ = (m); i < i_end_; ++i) {
    int u, v;
    scanf("%d %d", &u, &v);
    edge[i] = pair<int, int>(u, v);
    d[u]++;
    d[v]++;
  }
  int x = -1;
  for (int i = (1), i_end_ = (n + 1); i < i_end_; ++i)
    if (d[i] & 1) {
      if (x == -1)
        x = i;
      else {
        edge[m++] = pair<int, int>(x, i);
        x = -1;
      }
    }
  if (m & 1) edge[m++] = pair<int, int>(1, 1);
  for (int i = (1), i_end_ = (n + 1); i < i_end_; ++i) g[i].clear();
  for (int i = (0), i_end_ = (m); i < i_end_; ++i) {
    g[edge[i].first].push_back(i);
    g[edge[i].second].push_back(i);
  }
}
bool mark[M + 5];
int seq[M + 5];
int tot;
void dfs(int u) {
  for (int &i = head[u]; i < ((int)(g[u]).size()); ++i) {
    int id = g[u][i];
    if (mark[id]) continue;
    mark[id] = true;
    int v = edge[id].first ^ edge[id].second ^ u;
    dfs(v);
  }
  seq[tot++] = u;
}
int main() {
  input();
  printf("%d\n", m);
  for (int i = (1), i_end_ = (n + 1); i < i_end_; ++i) head[i] = d[i] = 0;
  for (int i = (0), i_end_ = (m); i < i_end_; ++i) mark[i] = false;
  tot = 0;
  dfs(1);
  bool f = false;
  for (int i = (0), i_end_ = (tot - 1); i < i_end_; ++i) {
    if (f)
      printf("%d %d\n", seq[i], seq[i + 1]);
    else
      printf("%d %d\n", seq[i + 1], seq[i]);
    f ^= 1;
  }
  return 0;
}
