#include <bits/stdc++.h>
using namespace std;
const int maxx = 5e5 + 20;
pair<int, int> e[maxx];
int n, m, p, flag, deg[maxx], usd[maxx];
vector<pair<int, int> > adj[maxx];
bool vis[maxx];
vector<int> v, ans;
void dfs(int root, int ind = -1) {
  while (usd[root] < deg[root]) {
    pair<int, int> x = adj[root][usd[root]];
    if (!vis[x.second]) {
      vis[x.second] = true;
      dfs(x.first);
    }
    usd[root]++;
  }
  ans.push_back(root);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  p = m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    x--, y--;
    e[i] = make_pair(x, y);
    adj[x].push_back(make_pair(y, i));
    adj[y].push_back(make_pair(x, i));
    deg[x]++, deg[y]++;
  }
  for (int i = 0; i < n; i++)
    if (deg[i] % 2) v.push_back(i);
  for (int i = 0; i < v.size(); i += 2) {
    adj[v[i]].push_back(make_pair(v[i + 1], p));
    adj[v[i + 1]].push_back(make_pair(v[i], p));
    e[p] = make_pair(v[i], v[i + 1]);
    p++;
    deg[v[i]]++, deg[v[i + 1]]++;
  }
  if (p % 2) {
    adj[0].push_back(make_pair(0, p));
    adj[0].push_back(make_pair(0, p));
    e[p] = make_pair(0, 0);
    deg[0] += 2;
    p++;
  }
  cout << p << '\n';
  dfs(0);
  for (int i = 1; i < ans.size(); i += 2) {
    cout << ans[i] + 1 << " " << ans[i - 1] + 1 << '\n';
    cout << ans[i] + 1 << " " << ans[i + 1] + 1 << '\n';
  }
  return 0;
}
