#include <bits/stdc++.h>
using namespace std;
int tot, n, m, to[4005], head[4005], net[4005], ma, ans1, ans2, ans, q[4005],
    top, a1, a2;
int flag[4005], sum, an, ma1, ma2;
int gets() {
  int v = 0;
  bool f = 0;
  char ch;
  while (!isdigit(ch)) {
    f |= ch == '-';
    ch = getchar();
  }
  while (isdigit(ch)) {
    v = (v << 3) + (v << 1) + ch - 48;
    ch = getchar();
  }
  return f ? -v : v;
}
void ins(int frm, int to2) {
  to[++tot] = to2, net[tot] = head[frm], head[frm] = tot;
  to[++tot] = frm, net[tot] = head[to2], head[to2] = tot;
}
void dfs1(int x, int fa, int dep, int typ) {
  flag[x] = 1;
  for (int t = head[x]; t; t = net[t])
    if (to[t] != fa) dfs1(to[t], x, dep + 1, typ);
  if (ma < dep) ma = dep, ans1 = x, ans2 = 0;
  if (typ == 2)
    if (dep - 1 == (ma) / 2 && !ans2) ans2 = x;
}
int main() {
  n = gets(), m = gets();
  if (n == 1) {
    cout << "0\n";
    return 0;
  }
  for (int i = 1; i <= m; i++) a1 = gets(), a2 = gets(), ins(a1, a2);
  ma2 = 1;
  for (int i = 1; i <= n; i++)
    if (!flag[i]) {
      ma = -1;
      ans1 = ans2 = 0;
      dfs1(i, i, 1, 1);
      ma = 0;
      dfs1(ans1, ans1, 1, 2);
      q[++top] = ans2;
      if (ma > ma1) ma1 = ma, ma2 = top;
    }
  ma = 0;
  for (int i = 1; i <= top; i++)
    if (i != ma2) ins(q[ma2], q[i]);
  dfs1(1, 1, 0, 1);
  dfs1(ans1, ans1, 0, 2);
  cout << ma << endl;
  for (int i = 1; i <= top; i++)
    if (i != ma2) cout << q[ma2] << " " << q[i] << endl;
  return 0;
}
