func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1000, M = 2000;   int head[N + 10], ver[M + 10], nxt[M + 10], tot = 0;   void add(int x, int y) {     ver[++tot] = y;     nxt[tot] = head[x];     head[x] = tot;   }   int col[N + 10], cnt = 0;   void dfs(int x) {     col[x] = cnt;     for (int i = head[x]; i; i = nxt[i]) {       int y = ver[i];       if (col[y]) continue;       dfs(y);     }   }   vector<int> seq[N + 10];   pair<int, int> que[N + 10];   int h = 1, t = 0, fa[N + 10];   bool vis[N + 10];   pair<int, int> bfs(int x, bool f) {     memset(vis, 0, sizeof(vis));     if (f) memset(fa, -1, sizeof(fa));     h = 1;     t = 0;     pair<int, int> ans = make_pair(0, 0);     que[++t] = make_pair(0, x);     vis[x] = 1;     while (h <= t) {       pair<int, int> H = que[h++];       ans = max(ans, H);       for (int i = head[H.second]; i; i = nxt[i]) {         int y = ver[i];         if (vis[y]) continue;         vis[y] = 1;         if (f) fa[y] = H.second;         que[++t] = make_pair(H.first + 1, y);       }     }     return ans;   }   int dis[N + 10], v[N + 10];   int main() {     int n, m;     scanf( %d %d , &n, &m);     for (int i = 1; i <= m; i++) {       int x, y;       scanf( %d %d , &x, &y);       add(x, y);       add(y, x);     }     int maxx = 0, f = 0;     for (int i = 1; i <= n; i++) {       if (!col[i]) {         cnt++;         dfs(i);         pair<int, int> tmp = bfs(bfs(i, false).second, true);         int y = tmp.second;         if (tmp.first >= maxx) {           maxx = tmp.first;           f = cnt;         }         while (~y) {           seq[cnt].push_back(y);           y = fa[y];         }         v[cnt] = seq[cnt][seq[cnt].size() / 2];       }     }     for (int i = 1; i <= cnt; i++) {       if (i == f) continue;       add(v[i], v[f]);       add(v[f], v[i]);     }     printf( %d n , bfs(bfs(1, false).second, false).first);     for (int i = 1; i <= cnt; i++) {       if (i == f) continue;       printf( %d %d n , v[i], v[f]);     }     return 0;   }   