public int numDistinct(String S, String T) {
		int m=S.length(), n=T.length();
		if (m<n||m==0||n==0)
			return 0;
		int[][]t=new int[m+1][n+1];
		t[0][0]=1;
		for (int i=1;i<=m;++i)
			for (int j=1;j<=n;++j) {
				if (S.charAt(i-1)==T.charAt(j-1))
					t[i][j]=t[i-1][j-1]+1;
				else 
					t[i][j]=Math.max(t[i-1][j],t[i][j-1]);
			}
		return t[m][n];
	}