#include <bits/stdc++.h>
using namespace std;
const int N = 1000 * 100 + 10, M = 1000 * 1000 * 100 + 10;
int n, m;
vector<pair<int, int> > ans, adj[N];
bool mark[M];
void readInput() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    adj[a].push_back(make_pair(b, i + 1));
    adj[b].push_back(make_pair(a, i + 1));
  }
  return;
}
void tour_e(int v) {
  while (!adj[v].empty()) {
    pair<int, int> u = adj[v].back();
    adj[v].pop_back();
    if (mark[u.second]) continue;
    mark[u.second] = 1;
    tour_e(u.first);
    ans.push_back(make_pair(v, u.first));
  }
}
int main() {
  readInput();
  vector<int> vec;
  for (int i = 0; i < n; i++) {
    int sz = (int)adj[i].size();
    if (sz % 2 != 0) vec.push_back(i);
  }
  for (int i = 0; i < (int)vec.size(); i += 2) {
    adj[vec[i]].push_back(make_pair(vec[i + 1], m + i + 1));
    adj[vec[i + 1]].push_back(make_pair(vec[i], m + i + 1));
  }
  tour_e(0);
  if ((int)ans.size() % 2 != 0) ans.push_back(make_pair(0, 0));
  printf("%d\n", (int)ans.size());
  for (int i = 0; i < (int)ans.size(); i++) {
    if (i % 2 == 0)
      printf("%d %d\n", ++ans[i].first, ++ans[i].second);
    else
      printf("%d %d\n", ++ans[i].second, ++ans[i].first);
  }
  return 0;
}
