#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
vector<int> vc[maxn], cv;
set<int> st;
set<int>::iterator it, itt;
int n, m, k, id;
int ans, tmp, cnt, ct, lid;
int ansid, ansl;
int vis[maxn], idx[maxn], du[maxn];
int in[maxn];
void dfs(int u, int fa) {
  vis[u] = 1;
  st.insert(u);
  in[u] = 1;
  for (int i = 0; i < vc[u].size(); i++) {
    int v = vc[u][i];
    if (v != fa) dfs(v, u);
  }
}
void findc() {
  vector<int> vv;
  for (it = st.begin(); it != st.end();) {
    itt = it;
    it++;
    int u = *itt;
    if (du[u] == 1) {
      vv.push_back(u);
      in[u] = 0;
      if (st.size() > 1) st.erase(u);
    }
  }
  while (st.size() > 2) {
    vector<int> v1;
    for (int i = 0; i < vv.size(); i++) {
      int u = vv[i];
      for (int j = 0; j < vc[u].size(); j++)
        if (in[vc[u][j]]) {
          if (--du[vc[u][j]] == 1) {
            v1.push_back(vc[u][j]);
            st.erase(vc[u][j]);
            in[vc[u][j]] = 0;
          }
        }
    }
    vv = v1;
  }
  cv.push_back(*st.begin());
}
void dfs2(int u, int fa, int dep) {
  if (dep > ans) {
    ans = dep;
    lid = u;
  }
  for (int i = 0; i < vc[u].size(); i++) {
    int v = vc[u][i];
    if (v == fa) continue;
    dfs2(v, u, dep + 1);
  }
}
int findzj(int u = 1, int idd = 1) {
  ans = -1;
  dfs2(u, 0, 0);
  ans = -1;
  dfs2(lid, 0, 0);
  if (idd && ans > ansl) {
    ansl = ans;
    ansid = id;
  }
  return ans;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    vc[u].push_back(v);
    vc[v].push_back(u);
    du[u]++;
    du[v]++;
  }
  id = 1;
  ansl = -1;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) {
      st.clear();
      for (int j = 1; j <= n; j++) in[j] = 0;
      dfs(i, 0);
      findc();
      findzj(i);
      id++;
    }
  for (int i = 0; i < cv.size(); i++)
    if (i == ansid - 1)
      continue;
    else {
      int u = cv[i];
      int v = cv[ansid - 1];
      vc[u].push_back(v);
      vc[v].push_back(u);
    }
  printf("%d\n", findzj(1, 0));
  for (int i = 0; i < cv.size(); i++)
    if (i == ansid - 1)
      continue;
    else {
      int u = cv[i];
      int v = cv[ansid - 1];
      printf("%d %d\n", u, v);
    }
  return 0;
}
