#include <bits/stdc++.h>
using namespace std;
const int N = 300005;
int n, m, d[N], Xor[N];
vector<int> a[N];
bool Used[N];
int Last[N], z = 0;
void connect(int x, int y, int i) {
  a[x].push_back(i);
  a[y].push_back(i);
  d[x]++;
  d[y]++;
  Xor[i] = x ^ y;
}
inline void visit(int u) {
  for (int &i = Last[u]; i < a[u].size(); i++)
    if (!Used[a[u][i]]) {
      int k = a[u][i], v = Xor[k] ^ u;
      Used[k] = true;
      visit(v);
      if (z ^= 1)
        printf("%d %d\n", v, u);
      else
        printf("%d %d\n", u, v);
    }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    connect(x, y, i);
  }
  for (int i = 1; i <= n; i++)
    if (d[i] & 1)
      for (int j = i + 1; j <= n; j++)
        if (d[j] & 1) {
          connect(i, j, ++m);
          break;
        }
  if (m & 1) connect(1, 1, ++m);
  cout << m << endl;
  visit(1);
}
