1def num_distinct(s, t):
2 m, n = len(s), len(t)
3 dp = [[0] * (m + 1) for _ in range(n + 1)]
4 for col in range(m + 1):
5 dp[0][col] = 1
6 for row in range(1, n + 1):
7 for col in range(1, m + 1):
8 dp[row][col] = dp[row][col - 1]
9 if t[row - 1] == s[col - 1]:
10 dp[row][col] += dp[row - 1][col - 1]
11 return dp[n][m]