class Solution {
public:
    int getLongestPalindrome(string A, int n) {
        // write code here
        n = A.size();
        if(n <= 1)
            return n;
        int dp[n+1][n+1];
        int maxLen = 1;
        for(int i = 0; i < n; i++)
        {
            dp[0][i] = 0;
            dp[i][0] = 0;
        }
        string RA = "";
        for(int i = n-1; i >= 0; i--)
        {
            RA += A[i];
        }
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(A[j-1] == RA[i-1])
                {
                    dp[i][j] = dp[i-1][j-1] + 1;
                    
                }
                else
                {
                    dp[i][j] = 0;
                }
//                 maxLen = maxLen < dp[i][j] ? dp[i][j] : maxLen;
                if(maxLen < dp[i][j] && i + j - dp[i][j] == n)
                {
                    maxLen = dp[i][j];
                    cout << "dp[" << i << "][" << j << "] = " << dp[i][j] << endl;
                }
            }
        }
        return maxLen;
    }
    
};