func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename U, typename V>   inline void smax(U &a, const V &b) {     if (a < b) a = b;   }   const long long INF = 0x3f3f3f3f3f3f3f3fLL;   const double pi = acosl(-1.), eps = 1e-9;   const int NN = 1010;   int hd[NN];   int nx[NN << 1];   int to[NN << 1];   int E;   void add(int u, int v) {     nx[E] = hd[u];     to[E] = v;     hd[u] = E++;     nx[E] = hd[v];     to[E] = u;     hd[v] = E++;   }   int flag[NN];   int father[NN];   int id[NN];   int crr_dp, crr_id;   pair<int, int> p[NN];   void dfs(int u, int dp = 0, int key = 1) {     flag[u] = key;     if (crr_dp < dp) {       crr_id = u;       crr_dp = dp;     }     for (int e = hd[u]; ~e; e = nx[e]) {       int v = to[e];       if (flag[v] == key) continue;       father[v] = u;       dfs(v, dp + 1, key);     }   }   int main() {     int n, m;     scanf( %d%d , &n, &m);     memset(hd, -1, sizeof(hd));     for (int i = 0, u, v; i < m; i++) {       scanf( %d%d , &u, &v);       add(u, v);     }     m = 0;     for (int i = 1, u, v; i <= n; i++) {       if (!flag[i]) {         crr_dp = -1;         dfs(i);         crr_dp = -1;         dfs(u = crr_id, 0, 2);         v = crr_id;         for (int j = 0; j < crr_dp / 2; j++) {           v = father[v];         }         p[m++] = pair<int, int>(crr_dp, v);       }     }     sort(p, p + m,          [](pair<int, int> a, pair<int, int> b) { return a.first > b.first; });     int dia = p[0].first;     if (m > 1) smax(dia, (p[0].first + 1 >> 1) + 1 + (p[1].first + 1 >> 1));     if (m > 2) smax(dia, (p[1].first + 1 >> 1) + 2 + (p[2].first + 1 >> 1));     printf( %d n , dia);     for (int i = 1; i < m; i++) {       printf( %d %d n , p[0].second, p[i].second);     }     return 0;   }   