#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> edges[100005];
map<pair<int, int>, int> deleted;
void del(int u) {
  while (edges[u].size() > 0 &&
         deleted[make_pair(u, edges[u][edges[u].size() - 1])] > 0) {
    --deleted[make_pair(u, edges[u][edges[u].size() - 1])];
    edges[u].pop_back();
  }
}
int deg(int u) {
  del(u);
  return (int)edges[u].size();
}
int del_edge(int u) {
  del(u);
  int v = edges[u][edges[u].size() - 1];
  ++deleted[make_pair(v, u)];
  edges[u].pop_back();
  return v;
}
vector<int> order;
void euler_circuit(int u) {
  while (deg(u) > 0) {
    int v = del_edge(u);
    euler_circuit(v);
  }
  order.push_back(u);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < (m); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    edges[a].push_back(b);
    edges[b].push_back(a);
  }
  int last = -1;
  for (int i = (1); i <= (n); i++) {
    if (edges[i].size() % 2 == 1) {
      if (last == -1)
        last = i;
      else {
        edges[last].push_back(i);
        edges[i].push_back(last);
        last = -1;
        ++m;
      }
    }
  }
  euler_circuit(1);
  if (m % 2 == 1) {
    order.push_back(1);
    ++m;
  }
  printf("%d\n", m);
  for (int i = 0; i < (m); i++) {
    int a = order[i];
    int b = order[(i + 1) % m];
    if (i % 2 == 1) swap(a, b);
    printf("%d %d\n", a, b);
  }
  return 0;
}
