class Solution {
public:
int numDistinct(string S, string T) {
int dp[T.size() + 1][S.size() + 1];
for (int i = 0; i <= S.size(); ++i) dp[0][i] = 1;
for (int i = 1; i <= T.size(); ++i) dp[i][0] = 0;
for (int i = 1; i <= T.size(); ++i) {
for (int j = 1; j <= S.size(); ++j) {
dp[i][j] = dp[i][j - 1] + (T[i - 1] == S[j - 1] ? dp[i - 1][j - 1] : 0);
}
}
return dp[T.size()][S.size()];
}
};