#include <bits/stdc++.h>
using namespace std;
long long mod = 998244353;
int n, m, ans, vis[1003], st, mx, mid;
vector<int> gr[1003], a, b;
vector<pair<int, int> > v;
multiset<int> ms;
void dfs(int x, int l, int num) {
  vis[x] = num;
  b.push_back(x);
  if (mx < l) {
    st = x;
    mx = l;
    mid = b[mx / 2];
  }
  for (int i = 0; i < gr[x].size(); i++) {
    int u = gr[x][i];
    if (vis[u] == num) continue;
    dfs(u, l + 1, num);
  }
  b.pop_back();
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    gr[x].push_back(y);
    gr[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i]) continue;
    mx = -1;
    dfs(i, 0, 1);
    dfs(st, 0, 2);
    v.push_back({mx, mid});
  }
  sort(v.rbegin(), v.rend());
  for (int i = 1; i < v.size(); i++) {
    a.push_back(v[i].second);
    gr[v[0].second].push_back(v[i].second);
    gr[v[i].second].push_back(v[0].second);
  }
  mx = -1;
  dfs(1, 0, 3);
  dfs(st, 0, 4);
  cout << mx << endl;
  for (int i = 0; i < a.size(); i++) cout << v[0].second << ' ' << a[i] << endl;
}
