public static String minWindow(String S, String T) {
		int[]r=new int[2];
		int ml=Integer.MAX_VALUE;
		int[] ct=new int[128], cs=new int[128];
		for (int i=0;i<T.length();++i)
			++ct[T.charAt(i)];
		int c=0;
		for (int i=0,j=0;i<S.length();++i) {
			if (c<T.length()&&cs[S.charAt(i)]<ct[S.charAt(i)])
				++c;
			++cs[S.charAt(i)];
			while (j<=i&&cs[S.charAt(j)]>ct[S.charAt(j)])
				--cs[S.charAt(j++)];
			if (c==T.length() && ml>i-j+1) {
				ml=i-j+1;
				r[0]=j;
				r[1]=i+1;
			}
		}
		return S.substring(r[0],r[1]);
	}