#include <bits/stdc++.h>
using namespace std;
const int N = 5e2 + 10;
int s[N];
int f[N][N];
int n;
int main(){
cin >> n;
memset(f, 0x3f, sizeof(f));
for(int i = 1; i <= n; i++){
scanf("%d", &s[i]);
f[i][i] = 1; // L = 0
if(s[i-1] == s[i]) // s[0] 空出来,一定不等于s[1],但不要紧,f[0][1]没有意义
f[i-1][i] = 1; // L = 1
else
f[i-1][i] = 2;
}
for(int L = 2; L <= n - 1; L++){
for(int i = 1; i + L <= n; i++ ){
int j = i + L;
if(s[i] == s[j])
f[i][j] = min(f[i][j], f[i+1][j-1]);
for(int k = i; k < j; k++){
f[i][j] = min(f[i][j], f[i][k] + f[k+1][j]);
}
}
}
cout << f[1][n];
return 0;
}