#include <bits/stdc++.h>
using namespace std;
const int IINF = 1e9;
const long long LINF = 1e18;
const int K = 1e5 + 5;
const int KL = 1e6 + 5;
int n;
int a[505];
int mem[505][505];
bool tok[505];
int dp(int l, int r) {
  if (l == r) return 1;
  if (l > r) return 0;
  if (mem[l][r] != -1) return mem[l][r];
  int k;
  int ans = 505, ans2 = 505, ans3 = 505;
  if (a[l] == a[l + 1]) ans2 = min(ans2, 1 + dp(l + 2, r));
  for (int k = l + 2; k <= r; k++)
    if (a[l] == a[k]) {
      ans = min(ans, dp(l + 1, k - 1) + dp(k + 1, r));
    }
  ans3 = 1 + dp(l + 1, r);
  return mem[l][r] = min({ans, ans2, ans3});
}
int main() {
  memset(mem, -1, sizeof mem);
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  printf("%d\n", dp(1, n));
  return 0;
}
