#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
int n, m;
vector<int> V[MAXN];
vector<pair<int, int>> E;
int bio[MAXN * 5];
int last[MAXN];
vector<int> nep;
vector<int> cyc;
void DFS(int curr) {
  for (int i = last[curr]; i < V[curr].size(); i = last[curr]) {
    last[curr]++;
    int next = V[curr][i];
    int nextV = E[next].first + E[next].second - curr;
    if (bio[next] == 1) continue;
    bio[next] = 1;
    DFS(nextV);
    cyc.push_back(curr);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int p1, p2;
    scanf("%d%d", &p1, &p2);
    V[p1].push_back(E.size());
    V[p2].push_back(E.size());
    E.push_back({p1, p2});
  }
  for (int i = 1; i <= n; i++) {
    if (V[i].size() % 2 == 1) nep.push_back(i);
  }
  for (int i = 0; i < nep.size(); i += 2) {
    int p1, p2;
    p1 = nep[i];
    p2 = nep[i + 1];
    V[p1].push_back(E.size());
    V[p2].push_back(E.size());
    E.push_back({p1, p2});
  }
  if (E.size() % 2 == 1) {
    V[1].push_back(E.size());
    V[1].push_back(E.size());
    E.push_back({1, 1});
  }
  printf("%d\n", E.size());
  DFS(1);
  cyc.push_back(cyc.front());
  for (int i = 0; i < cyc.size() - 1; i++) {
    if (i % 2 == 0)
      printf("%d %d\n", cyc[i], cyc[i + 1]);
    else
      printf("%d %d\n", cyc[i + 1], cyc[i]);
  }
  return 0;
}
