public List<Integer> findSubstring(String S, String[] L) {
		int wl=L[0].length(), dl=L.length, n=S.length();
		Map<String,Integer> cd=new HashMap<>();
		for (String s:L) {
			Integer val=cd.get(s);
			if (val==null)
				cd.put(s,1);
			else 
				cd.put(s,val+1);
		}
		List<Integer>rel=new ArrayList<>();
		for (int i=0;i<=n-wl*dl;++i) {
			Map<String,Integer> cs=new HashMap<>();
			boolean f=true;
			for (int j=1;j<=dl&&f;++j) {
				String str=S.substring(i+(j-1)*wl, i+j*wl);
				Integer v1=cd.get(str), v2=cs.get(str);
				if (v1==null||(v2!=null&&v1<=v2)) {
					f=false;
					break;
				}
				if (v2==null)
					cs.put(str,1);
				else 
					cs.put(str,v2+1);
			}
			if (f)
				rel.add(i);
		}
		return rel;
	}