//Sarvagya Agarwal
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define is(X) cout<<#X<<" is "<<X<<endl
#define ff first
#define ll long long
#define ss second
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define mp make_pair
#define openin freopen("input.txt","r",stdin)
#define openout freopen("output.txt","w",stdout)
int arr[550],n;
int dp[550][550];
int solve(int i,int j)
{
if(i>j){
return dp[i][j]=0;
}
if(i==j)
{
return dp[i][j]=1;
}
if(dp[i][j]!=-1)return dp[i][j];
int ans = INT_MAX;
//int a1 = 1 + solve(i+1,j);
int a1;
if(dp[i+1][j]!=-1)a1 = dp[i+1][j] + 1;
else a1 = 1 + solve(i+1,j);
ans = min(ans,a1);
if(arr[i]==arr[i+1])
{
if(dp[i+2][j]!=-1)ans=min(ans,1+dp[i+2][j]);
else ans=min(ans,1+solve(i+2,j));
}
for(int k = i+2;k<=j;k++)
{
if(arr[k]==arr[i])
{
//ans = min(ans , solve(i+1,k-1) + solve(k+1,j));
int a,b;
if(dp[i+1][k-1]!=-1)a = dp[i+1][k-1];
else a = solve(i+1,k-1);
if(dp[k+1][j]!=-1)b = dp[k+1][j];
else b = solve(k+1,j);
ans = min(ans,a+b);
}
}
//is(i);is(j);is(ans);
return dp[i][j] = ans;
}
int main()
{
fast;
int n;
cin>>n;
rep(i,1,n)cin>>arr[i];
rep(i,1,n)rep(j,1,n)dp[i][j]=-1;
cout<<solve(1,n)<<endl;
return 0;
}
Ly9TYXJ2YWd5YSBBZ2Fyd2FsCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcmVwKGksYSxiKSBmb3IoaW50IGk9YTtpPD1iOysraSkKI2RlZmluZSBpcyhYKSBjb3V0PDwjWDw8IiBpcyAiPDxYPDxlbmRsCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBvcGVuaW4gZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pCiNkZWZpbmUgb3Blbm91dCBmcmVvcGVuKCJvdXRwdXQudHh0IiwidyIsc3Rkb3V0KQoKaW50IGFycls1NTBdLG47CmludCBkcFs1NTBdWzU1MF07CmludCBzb2x2ZShpbnQgaSxpbnQgaikKewogICAgaWYoaT5qKXsKICAgICAgICByZXR1cm4gZHBbaV1bal09MDsKICAgIH0KICAgIGlmKGk9PWopCiAgICB7CiAgICAgICAgcmV0dXJuIGRwW2ldW2pdPTE7ICAgCiAgICB9CiAgICBpZihkcFtpXVtqXSE9LTEpcmV0dXJuIGRwW2ldW2pdOwogICAgaW50IGFucyA9IElOVF9NQVg7CiAgICAvL2ludCBhMSA9IDEgKyBzb2x2ZShpKzEsaik7CiAgICBpbnQgYTE7CiAgICBpZihkcFtpKzFdW2pdIT0tMSlhMSA9IGRwW2krMV1bal0gKyAxOwogICAgZWxzZSBhMSA9IDEgKyBzb2x2ZShpKzEsaik7CiAgICBhbnMgPSBtaW4oYW5zLGExKTsKICAgIGlmKGFycltpXT09YXJyW2krMV0pCiAgICB7CiAgICAgICAgaWYoZHBbaSsyXVtqXSE9LTEpYW5zPW1pbihhbnMsMStkcFtpKzJdW2pdKTsKICAgICAgICBlbHNlIGFucz1taW4oYW5zLDErc29sdmUoaSsyLGopKTsKICAgIH0KICAgIGZvcihpbnQgayA9IGkrMjtrPD1qO2srKykKICAgIHsKICAgICAgICBpZihhcnJba109PWFycltpXSkKICAgICAgICB7CiAgICAgICAgICAgIC8vYW5zID0gbWluKGFucyAsIHNvbHZlKGkrMSxrLTEpICsgc29sdmUoaysxLGopKTsKICAgICAgICAgICAgaW50IGEsYjsKICAgICAgICAgICAgaWYoZHBbaSsxXVtrLTFdIT0tMSlhID0gZHBbaSsxXVtrLTFdOwogICAgICAgICAgICBlbHNlIGEgPSBzb2x2ZShpKzEsay0xKTsKICAgICAgICAgICAgaWYoZHBbaysxXVtqXSE9LTEpYiA9IGRwW2srMV1bal07CiAgICAgICAgICAgIGVsc2UgYiA9IHNvbHZlKGsrMSxqKTsKICAgICAgICAgICAgYW5zID0gbWluKGFucyxhK2IpOwogICAgICAgIH0KICAgIH0KICAgIC8vaXMoaSk7aXMoaik7aXMoYW5zKTsKICAgIHJldHVybiBkcFtpXVtqXSA9IGFuczsKfQoKaW50IG1haW4oKQp7CiAgICBmYXN0OwogICAgCiAgICBpbnQgbjsKICAgIGNpbj4+bjsKICAgIHJlcChpLDEsbiljaW4+PmFycltpXTsKICAgIHJlcChpLDEsbilyZXAoaiwxLG4pZHBbaV1bal09LTE7CiAgICBjb3V0PDxzb2x2ZSgxLG4pPDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=