#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
const int N = 5e2 + 5;
int n;
int c[N];
// dp(l, r, carry) = Chi phí ít nhất để xoá hết đoạn [l, r] và trước đó có đang duy trì xâu đối xứng nào hay không
int memo[N][N][2];
int dp(int l, int r, bool carry) {
if (l > r) return 0;
if (l == r) return (!carry);
int& ans = memo[l][r][carry];
if (ans != -1) return ans;
// Cặp (c[l], c[k]) sẽ bổ sung vào xâu đối xứng đang duy trì trước đó nếu có,
// nếu không thì tạo mới một xâu đối xứng
ans = INF;
for (int k = l; k <= r; k++) {
if (c[l] == c[k]) {
minimize(ans, (!carry) + dp(l + 1, k - 1, 1) + dp(k + 1, r, 0));
}
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) cin >> c[i];
memset(memo, -1, sizeof memo);
cout << dp(1, n, 0) << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKY29uc3QgaW50IE4gPSA1ZTIgKyA1OyAKCmludCBuOyAKaW50IGNbTl07IAoKLy8gZHAobCwgciwgY2FycnkpID0gQ2hpIHBow60gw610IG5o4bqldCDEkeG7gyB4b8OhIGjhur90IMSRb+G6oW4gW2wsIHJdIHbDoCB0csaw4bubYyDEkcOzIGPDsyDEkWFuZyBkdXkgdHLDrCB4w6J1IMSR4buRaSB44bupbmcgbsOgbyBoYXkga2jDtG5nCmludCBtZW1vW05dW05dWzJdOyAgCgppbnQgZHAoaW50IGwsIGludCByLCBib29sIGNhcnJ5KSB7CglpZiAobCA+IHIpIHJldHVybiAwOwoJaWYgKGwgPT0gcikgcmV0dXJuICghY2FycnkpOyAKCglpbnQmIGFucyA9IG1lbW9bbF1bcl1bY2FycnldOyAKCWlmIChhbnMgIT0gLTEpIHJldHVybiBhbnM7IAoKCS8vIEPhurdwIChjW2xdLCBjW2tdKSBz4bq9IGLhu5Ugc3VuZyB2w6BvIHjDonUgxJHhu5FpIHjhu6luZyDEkWFuZyBkdXkgdHLDrCB0csaw4bubYyDEkcOzIG7hur91IGPDsywKCS8vIG7hur91IGtow7RuZyB0aMOsIHThuqFvIG3hu5tpIG3hu5l0IHjDonUgxJHhu5FpIHjhu6luZwoJYW5zID0gSU5GOyAgIAoJZm9yIChpbnQgayA9IGw7IGsgPD0gcjsgaysrKSB7CgkJaWYgKGNbbF0gPT0gY1trXSkgewoJCQltaW5pbWl6ZShhbnMsICghY2FycnkpICsgZHAobCArIDEsIGsgLSAxLCAxKSArIGRwKGsgKyAxLCByLCAwKSk7IAoJCX0KCX0KCglyZXR1cm4gYW5zOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG47IAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gY1tpXTsgCgoJbWVtc2V0KG1lbW8sIC0xLCBzaXplb2YgbWVtbyk7IAoKCWNvdXQgPDwgZHAoMSwgbiwgMCkgPDwgJ1xuJzsgCn0=