#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e2 + 1;
int memo[MAXN][MAXN];
int c[MAXN];
int n;
int dp(int i, int j) {
  if (i > j) return 0;
  if (i == j) return 1;
  int &ret = memo[i][j];
  if (ret != -1) return ret;
  ret = 1 + dp(i + 1, j);
  for (int k = i + 2; k < j + 1; k++) {
    if (c[i] == c[k]) {
      ret = min(ret, dp(i + 1, k - 1) + dp(k + 1, j));
    }
  }
  if (c[i] == c[i + 1]) ret = min(ret, 1 + dp(i + 2, j));
  return ret;
}
int main() {
  memset(memo, -1, sizeof memo);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &c[i]);
  printf("%d\n", dp(0, n - 1));
}
