#include <bits/stdc++.h>
using namespace std;
const long long maxn = 9e5 + 1000;
const long double SADAT = 7.84e-17;
const long long INF = 1e9;
const long long mod = 1e9 + 7;
const long double PI = 4 * atan((long double)1);
template <class T>
bool checkmin(T &a, T b) {
  return a > b ? a = b, 1 : 0;
}
long long pw(long long a, long long b) {
  return (!b ? 1
             : (b & 1 ? a * pw(a * a % mod, b / 2) % mod
                      : pw(a * a % mod, b / 2) % mod));
}
int n, m, d[maxn], ind[maxn];
vector<int> odd, ans;
vector<pair<int, int> > adj[maxn];
bool mark[maxn];
void dfs(int v) {
  for (; ind[v] < adj[v].size(); ind[v]++) {
    int u = adj[v][ind[v]].first;
    int indx = adj[v][ind[v]].second;
    if (!mark[indx]) {
      mark[indx] = 1;
      dfs(u);
    }
  }
  ans.push_back(v);
  ;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  memset(d, 0, sizeof d);
  ;
  memset(ind, 0, sizeof ind);
  ;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(make_pair(y, i));
    ;
    adj[y].push_back(make_pair(x, i));
    ;
    d[x]++;
    d[y]++;
  }
  for (int i = 1; i <= n; i++) {
    if (d[i] % 2) {
      odd.push_back(i);
      ;
    }
  }
  while (odd.size()) {
    int v = odd.back();
    odd.pop_back();
    int u = odd.back();
    odd.pop_back();
    adj[v].push_back(make_pair(u, m));
    ;
    adj[u].push_back(make_pair(v, m++));
    ;
  }
  dfs(1);
  n = ans.size() - 1;
  if (n % 2) {
    cout << n + 1 << '\n';
    cout << 1 << ' ' << 1 << '\n';
  } else {
    cout << n << '\n';
  }
  for (int i = 0; i < n; i++) {
    if (i % 2 == 0) {
      cout << ans.back();
      ans.pop_back();
      cout << ' ' << ans.back() << '\n';
    } else {
      int v = ans.back();
      ans.pop_back();
      cout << ans.back() << ' ' << v << '\n';
    }
  }
  return (0);
}
