#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 500005;
vector<int> gr[N], path, odd;
pair<int, int> ed[M];
bool us[M];
void GetEulerCircuit(int u) {
  while (true) {
    while (!gr[u].empty() && us[gr[u].back()]) {
      gr[u].pop_back();
    }
    if (gr[u].empty()) {
      break;
    }
    us[gr[u].back()] = true;
    int v = u ^ ed[gr[u].back()].first ^ ed[gr[u].back()].second;
    gr[u].pop_back();
    GetEulerCircuit(v);
  }
  path.push_back(u);
}
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  int n, m;
  scanf("%d %d ", &n, &m);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d ", &u, &v);
    ed[i] = make_pair(u, v);
    gr[u].push_back(i);
    gr[v].push_back(i);
  }
  for (int u = 1; u <= n; u++) {
    if (gr[u].size() % 2) {
      odd.push_back(u);
    }
  }
  for (int i = 0; i < odd.size(); i += 2) {
    int u = odd[i], v = odd[i + 1];
    ed[m] = make_pair(u, v);
    gr[u].push_back(m);
    gr[v].push_back(m);
    m++;
  }
  if (m % 2) {
    ed[m] = make_pair(1, 1);
    gr[1].push_back(m);
    gr[1].push_back(m);
    m++;
  }
  GetEulerCircuit(1);
  for (int i = 0; i < m; i++) {
    int u = path[i], v = path[i + 1];
    if (i % 2) {
      swap(u, v);
    }
    ed[i] = make_pair(u, v);
  }
  printf("%d\n", m);
  for (int i = 0; i < m; i++) {
    int u = ed[i].first, v = ed[i].second;
    printf("%d %d\n", u, v);
  }
}
