#include <iostream>
#include <cmath>

using namespace std;

constexpr int MAX_N = 300;

int memo[MAX_N+1][MAX_N+1];
int w[MAX_N];

int dfs(int i, int j) {
    if(memo[i][j] != -1) return memo[i][j];

    // あるペアの差の絶対値が1以下で，ペアの間の数が全て消せていたら，
    // そのペアを含めた区間も全て消せる
    if(abs(w[i]-w[i+j-1]) <= 1 && dfs(i+1, j-2) == j-2) {
        return memo[i][j] = j;
    }

    // 区間を途中で区切って最大の場合を見つける
    for(int k=i+1;k<=i+j;++k) {
        memo[i][j] = max(memo[i][j], dfs(i, k-i) + dfs(k, i+j-k));
    }
    return memo[i][j];
}

int solve(int n) {
    for(int i=0;i<n;++i){
        cin >> w[i];
    }

    fill_n(memo[0], (MAX_N+1)*(MAX_N+1), -1);
    for(int i=0;i<=n;++i) {
        memo[i][0] = 0;
        memo[i][1] = 0;
    }
    
    return dfs(0, n);
}

int main() {
    int n;
    while(cin >> n && n) {
        cout << solve(n) << endl;
    }
}
