1class Solution:2def removeBoxes(self, B):34@lru_cache(None)5def dp(i, j, k):6if i > j:7return 08indx = [m for m in range(i + 1, j + 1) if B[m] == B[i]]9ans = (k + 1) ** 2 + dp(i + 1, j, 0)10return max([ans] + [dp(i + 1, m - 1, 0) + dp(m, j, k + 1) for m in indx])1112return dp(0, len(B) - 1, 0)