List<Integer> stringMatchReplace(String s, String p) {
		int m=s.length(),n=p.length();
		int[] pi=new int[n]; 
		for (int k=0, q=1; q<n;++q) {
			while (k>0&&p.charAt(k)!=p.charAt(q)) k=pi[k];
			if (p.charAt(k)==p.charAt(q))++k;
			pi[q]=k;
		}
		int q=0;
		List<Integer> rel=new ArrayList<>();rel.add(-1);
		for (int i=0;i<m;++i) {
			while (q>0&&s.charAt(i)!=p.charAt(q))q=pi[q];
			if (s.charAt(i)==p.charAt(q))++q;
			if (q==n) {rel.add(i-n+1);q=pi[q-1];}
		}
		return rel.subList(1, rel.size());
	}