#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
template <class T>
inline void smin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void smax(T &a, T b) {
  if (a < b) a = b;
}
int best[555][555], a[555];
int main() {
  int N, i, j, len, st, ed, k;
  scanf("%d", &N);
  for (int i = 0; i < N; i++) scanf("%d", a + i);
  memset(best, 0x3f, sizeof(best));
  for (len = 1; len <= N; len++) {
    for (i = 0; i + len <= N; i++) {
      j = i + len - 1;
      if (len == 1)
        best[i][j] = 1;
      else {
        for (k = i; k < j; k++) smin(best[i][j], best[i][k] + best[k + 1][j]);
        st = i;
        ed = j;
        while (1) {
          if (a[st] != a[ed]) break;
          if (st + 1 <= ed - 1)
            smin(best[i][j], best[st + 1][ed - 1]);
          else
            smin(best[i][j], 1);
          st++;
          ed--;
          if (st > ed) break;
        }
      }
    }
  }
  printf("%d\n", best[0][N - 1]);
  return 0;
}
