#include <bits/stdc++.h>
using namespace std;
vector<int> Adj[1010], temp, path;
int c = 0, last = 0, maxCnt, vis[1010]{0};
void visit(int u) {
  if (vis[u]) return;
  vis[u] = 1;
  for (int& v : Adj[u]) visit(v);
}
void diam(int u, int from, int cnt) {
  temp.push_back(u);
  if (cnt > maxCnt) {
    last = u;
    maxCnt = cnt;
    path = temp;
  }
  int ret = cnt;
  for (int& v : Adj[u]) {
    if (v != from) diam(v, u, cnt + 1);
  }
  temp.pop_back();
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m, u, v;
  cin >> n >> m;
  while (m--) {
    cin >> u >> v;
    Adj[u].push_back(v);
    Adj[v].push_back(u);
  }
  vector<pair<int, int>> vii;
  for (int i = 1; i <= n; i++) {
    if (!vis[i]) {
      c++;
      visit(i);
      maxCnt = -1;
      diam(i, 0, 0);
      diam(last, 0, 0);
      vii.push_back({maxCnt, path[maxCnt / 2]});
    }
  }
  if (c == 1) {
    cout << vii[0].first;
  } else {
    sort(vii.begin(), vii.end());
    u = vii.back().second;
    for (int i = 0; i < (int)vii.size() - 1; i++) {
      v = vii[i].second;
      Adj[u].push_back(v);
      Adj[v].push_back(u);
    }
    memset(vis, 0, sizeof(vis));
    visit(1);
    maxCnt = -1;
    diam(1, 0, 0);
    diam(last, 0, 0);
    cout << maxCnt << '\n';
    for (int i = 0; i < (int)vii.size() - 1; i++) {
      cout << vii.back().second << ' ' << vii[i].second << '\n';
    }
  }
  return 0;
}
