Python 3 without Bitmask, Simple Backtracking + DP approach
\nclass Solution:\n    def maxProduct(self, s: str) -> int:\n        sz, ans, s1, s2 = len(s), 0, \'\', \'\'\n        \n        @lru_cache(None)\n        def so
```\nclass Solution:\n    def maxProduct(self, s: str) -> int:\n        sz, ans, s1, s2 = len(s), 0, \'\', \'\'\n        \n        @lru_cache(None)\n        def solve(i: int, s1: str, s2: str) -> None:\n            nonlocal ans, s\n            if i >= sz:\n                if s1 == s1[::-1] and s2 == s2[::-1]:\n                    ans = max(ans, len(s1) * len(s2))\n                return\n            solve(i + 1, s1, s2)\n            s1_pick, s2_pick = s1 + s[i], s2 + s[i]\n            solve(i + 1, s1_pick, s2)\n            solve(i + 1, s1, s2_pick)\n            \n        solve(0, s1, s2)\n        return ans\n```
['Dynamic Programming', 'Backtracking', 'Recursion', 'Python']