func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   vector<int> v[1005];   int ma, src;   bool vis[1005];   int p[1005];   void dfs(int s, int pa, int d) {     p[s] = pa;     vis[s] = 1;     if (d >= ma) {       src = s;       ma = d;     }     for (int i = 0; i < v[s].size(); i++) {       int u = v[s][i];       if (u != pa) {         dfs(u, s, d + 1);       }     }   }   int main() {     int u = 0;     ios::sync_with_stdio(0);     cin >> n >> m;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       v[x].push_back(y);       v[y].push_back(x);     }     int trees = 0, ans = 0;     vector<int> vvv;     vector<pair<int, int> > vv;     for (int i = 1; i <= n; i++) {       if (!vis[i]) {         ma = 0;         src = i;         dfs(i, -1, 0);         dfs(src, -1, 0);         int node = src;         for (int j = 0; j < ma / 2; j++) {           node = p[node];         }         vv.push_back({ma, node});         trees++;         u = max(u, ma);         vvv.push_back((ma + 1) / 2);       }     }     sort(vvv.begin(), vvv.end());     sort(vv.rbegin(), vv.rend());     for (int i = vvv.size() - 1; i >= max(0, (int)(vvv.size() - 2)); i--) {       ans += vvv[i];     }     int mi = 2;     if (vvv.size() >= 3) {       if (vvv[vvv.size() - 3] < vvv[vvv.size() - 1]) {         mi = 1;       }     }     ans += min(trees - 1, mi);     ans = max(ans, u);     cout << ans << endl;     for (int i = 0; i < vv.size() - 1; i++) {       cout << vv[0].second <<     << vv[i + 1].second << endl;     }     return 0;   }   