#include #include #include using namespace std; int memo[5001][5001]; int d[5555]; int dp(int a, int b){ if(a==b) return 0; if(a+1==b) return (d[a] == d[b] ? 1 : 0); if(memo[a][b] != -1) return memo[a][b]; else{ memo[a][b] = max(max(dp(a+1,b), dp(a,b-1)), dp(a+1,b-1)+(d[a]==d[b] ? 1:0)); //printf("%d %d: %d\n", a, b, memo[a][b]); return memo[a][b]; } } int main(void){ int n; while(scanf("%d", &n) == 1){ for(int i = 0; i < n; i++) scanf("%d", &d[i]); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) memo[i][j] = -1; printf("%d\n", dp(0,n-1)); //printf("konec\n"); } }