#include <bits/stdc++.h>   using namespace std;   template <class T>   T gcd(T a, T b) {     return b ? gcd(b, a % b) : a;   }   const double EPS = 1e-9;   const double PI = acos(-1.);   const int INF = 1e8;   const int MAXN = 505;   const long long MOD = 1e9 + 7;   int v[MAXN];   int dp[MAXN][MAXN];   void solve() {     int n, i, j, k, lim, fl;     scanf( %d , &n);     for ((i) = (0); (i) < (int)(n); (i)++) {       scanf( %d , &v[i]);     }     for ((i) = (0); (i) < (int)(n); (i)++) {       for ((j) = (0); (j) < (int)(n); (j)++) {         dp[i][j] = INF;       }     }     for (i = n - 1; i >= 0; i--) {       dp[i][i] = 1;       if (i < n - 1) {         dp[i][i + 1] = 2;         if (v[i] == v[i + 1]) {           dp[i][i + 1] = 1;         }       }       for (j = i + 2; j < n; j++) {         for (k = i; k < j; k++) {           dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);         }         if (v[i] == v[j]) {           dp[i][j] = min(dp[i][j], dp[i + 1][j - 1]);         }       }     }     printf( %d n , dp[0][n - 1]);   }   int main() {     int t = 1;     while (t--) {       solve();     }   }   