class Solution:
def numDistinct(self, s: str, t: str) -> int:
cache = {}
for i in range(len(s) + 1):
cache[(i, len(t))] = 1
for j in range(len(t)):
cache[(len(s), j)] = 0
for i in range(len(s) - 1, -1, -1):
for j in range(len(t) - 1, -1, -1):
if s[i] == t[j]:
cache[(i, j)] = cache[(i + 1, j + 1)] + cache[(i + 1, j)]
else:
cache[(i, j)] = cache[(i + 1, j)]
return cache[(0, 0)]