#include #define REP(i, n) for(int i = 0 ; i< (int)n; ++i) using namespace std; bool testcase(){ int n; if(!(cin >> n))return false; vector values(n); for(int i = 0; i < n; i++) cin >> values[i]; vector> dp(n+1); for(auto& x : dp) x.resize(n+1); for(int d = 0; d < n; d++) { for(int i = 0; i < n - d; i++) { int l = i; int r = i + d; if(d == 0) dp[l][r] = 0; else { if(values[l] == values[r]) dp[l][r] = dp[l+1][r-1] + 1; else dp[l][r] = max(dp[l+1][r], dp[l][r-1]); } } } /* for(int i = 0; i < n; i++) { for(auto& x : dp[i]) cerr << x << " "; cerr << endl; } */ cout << dp[0][n-1] << endl; return true; } int main(){ while(testcase()); return 0; }