#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
bool del[MAXN * 5];
int deg[MAXN], ptr[MAXN], in[MAXN], out[MAXN];
vector<int> odd, euler;
vector<pair<int, int> > adj[MAXN], res;
int n, m;
void dfs(int u, int pa) {
  for (; ptr[u] < (int)adj[u].size();) {
    pair<int, int> v = adj[u][ptr[u]];
    if (del[v.second]) {
      ptr[u]++;
      continue;
    }
    ptr[u]++;
    del[v.second] = true;
    dfs(v.first, u);
  }
  if (ptr[u] == (int)adj[u].size()) euler.push_back(u);
}
void solve() {
  dfs(1, 0);
  for (int i = 0; i < (int)euler.size() - 1; i++) {
    if (i & 1) {
      in[euler[i]]++;
      out[euler[i + 1]]++;
      res.push_back(pair<int, int>(euler[i + 1], euler[i]));
    } else {
      out[euler[i]]++;
      in[euler[i + 1]]++;
      res.push_back(pair<int, int>(euler[i], euler[i + 1]));
    }
  }
  if (out[1] & 1) res.push_back(pair<int, int>(1, 1));
  cout << (int)res.size() << endl;
  for (int i = 0; i < (int)res.size(); i++)
    cout << res[i].first << ' ' << res[i].second << endl;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(pair<int, int>(b, i));
    adj[b].push_back(pair<int, int>(a, i));
    deg[a]++;
    deg[b]++;
  }
  for (int i = 1; i <= n; i++)
    if (deg[i] & 1) odd.push_back(i);
  for (int i = 0; i < (int)odd.size(); i += 2) {
    adj[odd[i]].push_back(pair<int, int>(odd[i + 1], m));
    adj[odd[i + 1]].push_back(pair<int, int>(odd[i], m++));
  }
  solve();
  return 0;
}
