#include <bits/stdc++.h>
using namespace std;
class Timer {
 private:
  string scope_name;
  chrono::high_resolution_clock::time_point start_time;

 public:
  Timer(string name) : scope_name(name) {
    start_time = chrono::high_resolution_clock::now();
  }
  ~Timer() {
    auto stop_time = chrono::high_resolution_clock::now();
    auto length =
        chrono::duration_cast<chrono::microseconds>(stop_time - start_time)
            .count();
    double mlength = double(length) * 0.001;
    ;
  }
};
const long long MOD = 1000000007;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int iNF = 0x3f3f3f3f;
const long long MAXN = 1000006;
int n, m;
bool vis[MAXN];
set<int> edge[MAXN];
vector<pair<int, int> > euler;
vector<int> eulerV;
void dfs(int nd, int par) {
  vis[nd] = true;
  while (int(edge[nd].size())) {
    auto v = *edge[nd].begin();
    edge[nd].erase(v);
    edge[v].erase(nd);
    dfs(v, nd);
  }
  if (!eulerV.empty()) {
    euler.emplace_back(eulerV.back(), nd);
  }
  eulerV.emplace_back(nd);
}
bool valid(const pair<int, int> &edg) { return edg.first * edg.second; }
int main() {
  ;
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i += 1) {
    int u, v;
    cin >> u >> v;
    edge[u].insert(v);
    edge[v].insert(u);
  }
  for (int i = 1; i < n + 1; i += 1) {
    if (int(edge[i].size()) & 1) {
      edge[0].insert(i);
      edge[i].insert(0);
    }
  }
  vector<pair<int, int> > ans;
  for (int i = 1; i < n + 1; i += 1) {
    if (!vis[i]) {
      euler.clear();
      eulerV.clear();
      dfs(i, i);
      ;
      for (int i = 0; i < int(euler.size()); i += 1) {
        if ((i & 1 ^ 1) && valid(euler[i])) {
          ans.emplace_back(euler[i]);
        } else {
          if (valid(euler[i]) && (!valid(euler[i - 1]) ||
                                  !valid(euler[(i + 1) % int(euler.size())]))) {
            ans.emplace_back(euler[i]);
          }
        }
      }
    }
  }
  cout << int(ans.size()) << '\n';
  for (auto p : ans) {
    cout << p.first << " " << p.second << '\n';
  }
  return 0;
}
