#include <bits/stdc++.h>
using namespace std;
multiset<int> adj[100100];
multiset<int>::iterator it;
queue<int> q;
void find_path(int u) {
  while (!adj[u].empty()) {
    it = adj[u].begin();
    int v = (*it);
    adj[u].erase(it);
    it = adj[v].find(u);
    adj[v].erase(it);
    find_path(v);
  }
  q.push(u);
}
int main() {
  int n, m, u, v;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &u, &v);
    adj[u].insert(v);
    adj[v].insert(u);
  }
  for (int i = 1; i <= n; i++) {
    if (adj[i].size() & 1) q.push(i);
  }
  while (!q.empty()) {
    u = q.front();
    q.pop();
    v = q.front();
    q.pop();
    adj[u].insert(v);
    adj[v].insert(u);
    m++;
  }
  if (m & 1) m++, adj[1].insert(1), adj[1].insert(1);
  for (int i = 1; i <= n; i++) {
    if (adj[i].size()) find_path(i);
  }
  printf("%d\n", m);
  for (int i = 0; i < m; i++) {
    int u = q.front();
    q.pop();
    if (i & 1)
      printf("%d %d\n", u, q.front());
    else
      printf("%d %d\n", q.front(), u);
  }
  return 0;
}
