#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10010;
int N, M;
int V;
bool vis[MAXN];
list<int> adj[MAXN];
bool dfs(int x, int y) {
  if (vis[x]) {
    return false;
  }
  vis[x] = true;
  if (adj[x].size() < V) {
    adj[x].push_back(y);
    return true;
  }
  for (auto it = adj[x].begin(); it != adj[x].end(); it++) {
    if (dfs(*it, x)) {
      adj[x].push_back(y);
      adj[x].erase(it);
      return true;
    }
  }
  return false;
}
bool add(int x, int y) {
  memset((vis), (0), sizeof(vis));
  return dfs(x, y);
}
int main() {
  scanf("%d %d", &N, &M);
  for (int i = 1; i <= M; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    if (!(add(x, y) || add(y, x))) {
      V++;
      assert(add(x, y) || add(y, x));
    }
  }
  printf("%d\n", V);
  for (int i = 1; i <= N; i++) {
    for (int j : adj[i]) {
      printf("%d %d\n", i, j);
    }
  }
}
