#include <bits/stdc++.h>
using namespace std;
long long i, j, k, len, dp[510][510];
long long s[1000];
long long rec(long long i, long long j) {
  if (i > j) return 0;
  if (i == j) return 1;
  if (dp[i][j] > 0) return dp[i][j];
  long long ans = LONG_MAX;
  ans = min(1 + rec(i + 1, j), ans);
  if (s[i] == s[i + 1]) ans = min(1 + rec(i + 2, j), ans);
  for (k = i + 2; k <= j; k++) {
    if (s[i] == s[k]) ans = min(ans, rec(i + 1, k - 1) + rec(k + 1, j));
  }
  dp[i][j] = ans;
  return ans;
}
int main() {
  long long data;
  cin >> data;
  for (int i = 0; i < data; i++) cin >> s[i];
  len = data;
  memset(dp, 0, sizeof(dp));
  for (int i = 0; i < len; i++) {
    dp[i][i] = 1;
  }
  for (long long i = 0; i < len - 1; i++) {
    if (s[i] == s[i + 1]) dp[i][i + 1] = 1;
  }
  cout << rec(0, len - 1) << endl;
  return 0;
}
