func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 207;   int n, f[MAXN];   long long mmc_atual = 1;   vector<int> folhas, Gr[MAXN];   bool in_cycle[MAXN], mrk[MAXN];   int marca_ciclo(int u) {     if (in_cycle[u]) return 0;     in_cycle[u] = true;     return 1 + marca_ciclo(f[u]);   }   void dfsr(int u) {     mrk[u] = true;     bool flag = true;     for (int i = 0; i < (int)Gr[u].size(); i++) {       int viz = Gr[u][i];       flag = false;       if (mrk[viz]) continue;       dfsr(viz);     }     if (flag) folhas.push_back(u);   }   int dfs(int u) {     if (in_cycle[u]) return 0;     return 1 + dfs(f[u]);   }   long long mdc(long long a, long long b) { return (a == 0) ? b : mdc(b % a, a); }   long long mmc(long long a, long long b) { return (a / mdc(a, b)) * b; }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cin >> n;     for (int i = 1; i <= n; i++) {       cin >> f[i];       Gr[f[i]].push_back(i);     }     long long ans = 1;     long long mx_chain = 0;     for (int i = 1; i <= n; i++) {       if (!mrk[i]) {         int turtoise = i;         int hare = i;         do {           turtoise = f[turtoise];           hare = f[f[hare]];         } while (turtoise != hare);         int tam_ciclo = marca_ciclo(hare);         mmc_atual = mmc(mmc_atual, (long long)tam_ciclo);         dfsr(hare);       }     }     for (int i = 0; i < (int)folhas.size(); i++) {       int tam_chain = dfs(folhas[i]);       mx_chain = max(mx_chain, (long long)tam_chain);     }     if (mx_chain % mmc_atual != 0)       mx_chain = (mx_chain - mx_chain % mmc_atual) + mmc_atual;     ans = max(mmc_atual, mx_chain);     cout << ans << endl;   }   