#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
const int MAXN = 1000;
int sum[MAXN];
vector<vector<int>> grafo;
int n, m;
vector<int> ct;
int diameter(int id, int prec = -1) {
  int res = 0;
  for (auto el : grafo[id]) {
    if (el != prec) {
      res = max(res, 1 + diameter(el, id));
    }
  }
  return res;
}
vector<bool> seen;
int centroid(int id) {
  int rs = id;
  seen[id] = true;
  for (auto el : grafo[id]) {
    if (!seen[el]) {
      int a = centroid(el);
      rs = sum[a] < sum[rs] ? a : rs;
    }
  }
  return rs;
}
vector<pii> edge;
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  grafo.resize(n);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    grafo[a].push_back(b);
    grafo[b].push_back(a);
  }
  seen.resize(n);
  for (int i = 0; i < n; i++) sum[i] = diameter(i);
  for (int i = 0; i < n; i++) {
    if (!seen[i]) {
      ct.push_back(centroid(i));
    }
  }
  iter_swap(ct.begin(), max_element(ct.begin(), ct.end(), [&](int a, int b) {
              return sum[a] < sum[b];
            }));
  for (auto el : ct) {
    if (el != ct[0]) {
      grafo[el].push_back(ct[0]);
      grafo[ct[0]].push_back(el);
      edge.emplace_back(el + 1, ct[0] + 1);
    }
  }
  int rs = 0;
  for (int i = 0; i < n; i++) rs = max(rs, diameter(i));
  cout << rs << '\n';
  for (auto el : edge) {
    cout << el.first << " " << el.second << '\n';
  }
  return 0;
}
