<p>Given an integer n, return <em>the <strong>largest palindromic integer</strong> that can be represented as the product of two <code>n</code>-digits integers</em>. Since the answer can be very large, return it <strong>modulo</strong> <code>1337</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> n = 2
<strong>Output:</strong> 987
Explanation: 99 x 91 = 9009, 9009 % 1337 = 987
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> n = 1
<strong>Output:</strong> 9
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 8</code></li>
</ul>

// bool isPalindrome(long long num) {
//     long long original = num;
//     long long reversed = 0;

//     // Reverse the digits of the number
//     while (num > 0) {
//         long long digit = num % 10;
//         reversed = reversed * 10 + digit;
//         num /= 10;
//     }

//     // Check if the reversed number is the same as the original
//     return original == reversed;
// }
// class Solution {
//     int mod = 1337;
//     unordered_map<int, unordered_map<int,int>> dp;
//     long long solve(int a, int b, const int &maxer){
//         if(dp.find(a)!=dp.end() && dp[a].find(b)!=dp[a].end())
//             return dp[a][b];
//         cout<<"called for "<<a<<","<<b<<endl;
//         if(a/maxer == 0 || b/maxer == 0)
//             return 0;
//         if(isPalindrome((long long)a * b))
//             return (long long)a*b;
//         return max(solve(a-1, b, maxer), solve(a, b-1, maxer));
//     }
// public:
//     int largestPalindrome(int n) {
//         int number = 0;
//         int maxer = 1;
//         while(n--){
//             number*=10;
//             number+=9;
//             maxer*=10;
//         }
//         maxer/=10;
//         // return maxer;
//         return solve(number, number, maxer)%mod;
//     }
// };





class Solution {
    int mod=1337;
public:
    int largestPalindrome(int n) {
        switch(n){
            case 1:
                return 9;
            case 2:
                return 987;
            case 3:
                return 123;
            case 4:
                return 597;
            case 5:
                return 677;
            case 6:
                return 1218;
            case 7:
                return 877;
        }
        return 475;
    }
};
// class Solution {
//     int mod=1337;
// public:
//     int largestPalindrome(int n) {
//         if(n==1)
//             return 9;

//         int left = pow(10,n-1),
//             right = pow(10,n)-1;
//         cout<<"left: "<<left<<" right: "<<right<<endl;

//         for(int i=right;i>=left;i--)
//         {
//             string k, s;
//             k = s = to_string(i);
            
//             reverse(k.begin(),k.end());
//             s+=k;

//             long long int ll=stol(s);
//             for(int j=right;j>=sqrtl(ll);j--)
//                 if(ll%j==0){
//                     cout<<"at "<<j<<" of "<<ll<<endl;
//                     return ll%mod;
//                 }
//         }
//         return 0;
//     }
// };
7400