#include #include #include int max (int a, int b) { if (a > b) return a; else return b; } int main(){ int i, j, * ans, * duck, n; while (1) { if (scanf("%i", &n) != 1) break; duck = malloc(sizeof(int)* n); for (i = 0; i < n; i++) scanf("%i", &duck[i]); ans = malloc(sizeof(int) * n * n); for(i = 0; i < n; i++){ *(ans + i*n + i) = 0; } for (i = 0; i < n - 1; ++i){ if (duck[i] == duck[i + 1]){ *(ans + i*n + (i + 1)) = 1; } else { *(ans + i*n + (i + 1)) = 0; } } for (i = 2; i < n; ++i){ for (j = 0; (j + i) < n; ++j){ if (duck[j] == duck[j + i]){ *(ans + j*n + i+j) = *(ans + (j + 1)*n + i+j - 1) + 1; } else *(ans + j*n + i+j) = max(*(ans + (j + 1)*n + i+j), *(ans + j*n + i+j - 1)); } } free(duck); free(ans); printf("%i\n", *(ans + n - 1)); } return 0; }