1class Solution:2def numPermsDISequence(self, s: str) -> int:3n = len(s)4dp = [[None for j in range(n - i + 1)] for i in range(n)]5for j in range(n - 1, 0 - 1, -1):6if s[j] == "I":7if j == n - 1:8dp[j][0] = 19dp[j][1] = 010else:11dp[j][n - j] = 012for i in range((n - j) - 1, 0 - 1, -1):13dp[j][i] = dp[j + 1][i] + dp[j][i + 1]14else:15if j == n - 1:16dp[j][0] = 017dp[j][1] = 118else:19dp[j][0] = 020for i in range(1, n - j + 1):21dp[j][i] = dp[j + 1][i - 1] + dp[j][i - 1]22return sum([dp[0][i] for i in range(n + 1)]) % (10**9 + 7)