func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<vector<long long int> > dp;   vector<long long int> a;   long long int check(long long int l, long long int r) {     if (l >= r) return 0;     if (dp[l][r]) return dp[l][r];     if (l + 1 == r) {       dp[l][r] = a[r];       return a[r];     }     dp[l][r] = -1;     for (int m = l + 1; m < r; ++m) {       long long int lf = check(l, m), rt = check(m, r);       if (lf > 0 && lf == rt) {         dp[l][r] = lf + 1;         return lf + 1;       }     }     return dp[l][r];   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long int n;     cin >> n;     a.resize(n + 1);     for (int i = 1; i <= n; ++i) cin >> a[i];     dp.assign(n + 1, vector<long long int>(n + 1, 0));     vector<long long int> ans(n + 1, 1e9);     ans[0] = 0;     for (int i = 0; i < n; ++i) {       for (int j = i + 1; j <= n; ++j) {         if (check(i, j) > 0) ans[j] = min(ans[j], ans[i] + 1);       }     }     cout << ans[n];   }   