#include <bits/stdc++.h>
const int INF = 1e9;
const long long lINF = 1e18;
const double EPS = 1e-12;
using namespace std;
int n, m;
vector<int> g[111111];
vector<int> edge[111111];
vector<int> d;
int cur[111111];
vector<int> ans;
bool used[1111111];
void dfs(int v) {
  for (; cur[v] < int((g[v]).size());) {
    if (!used[edge[v][cur[v]]]) {
      used[edge[v][cur[v]]] = true;
      cur[v]++;
      dfs(g[v][cur[v] - 1]);
    } else {
      cur[v]++;
    }
  }
  ans.push_back(v);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    g[x].push_back(y);
    g[y].push_back(x);
    edge[x].push_back(i);
    edge[y].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    if (int((g[i]).size()) & 1) {
      d.push_back(i);
    }
  }
  int last = m;
  for (int i = 0; i < int((d).size()); i += 2) {
    g[d[i]].push_back(d[i + 1]);
    g[d[i + 1]].push_back(d[i]);
    edge[d[i]].push_back(last);
    edge[d[i + 1]].push_back(last);
    last++;
    m++;
  }
  if (m & 1) {
    g[1].push_back(1);
    g[1].push_back(1);
    edge[1].push_back(last);
    edge[1].push_back(last);
    last++;
    m++;
  }
  dfs(1);
  printf("%d\n", ans.size() - 1);
  for (int i = 0; i < int((ans).size()) - 1; 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;
}
