func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   const int mxN = 1000;   int prnt[mxN];   int rnk[mxN];   vector<int> adj[mxN];   vector<pair<int, int>> ans;   int vis[mxN];   int find(int i) {     if (prnt[i] != i) prnt[i] = find(prnt[i]);     return prnt[i];   }   void join(int x, int y) {     int xroot = find(x);     int yroot = find(y);     if (rnk[xroot] < rnk[yroot])       prnt[xroot] = yroot;     else if (rnk[xroot] > rnk[yroot])       prnt[yroot] = xroot;     else {       prnt[yroot] = xroot;       rnk[xroot]++;     }   }   void dfs(int u, int e) {     for (auto ad = adj[u].begin(); ad != adj[u].end(); ad++) {       if (*ad == e || vis[*ad]) continue;       int adprnt = find(*ad);       int uprnt = find(u);       if (adprnt == uprnt) {         ans.push_back(make_pair(u, *ad));         continue;       }       join(*ad, u);       dfs(*ad, u);     }     vis[u] = 1;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n;     for (int i = 0; i < n - 1; i++) {       int x, y;       cin >> x >> y;       x--;       y--;       adj[x].push_back(y);       adj[y].push_back(x);     }     for (int i = 0; i < n; i++) {       prnt[i] = i;     }     for (int i = 0; i < n; i++) {       if (!vis[i]) {         dfs(i, -1);       }     }     cout << ans.size() << endl;     int id = 0;     for (int i = 0; i < n; i++) {       for (int j = i + 1; j < n; j++) {         int x = find(i);         int y = find(j);         if (x != y) {           cout << ans[id].first + 1 <<     << ans[id].second + 1 <<     << i + 1                <<     << j + 1 << endl;           id++;           join(i, j);         }       }     }     return 0;   }   