/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone {
int[] f;
public void dfa
(String pattern
) { int m = pattern.length();
f = new int[m+1];
f[0] = 0;
f[1] = 0;
for(int i=2; i<=m; i++) {
int j = f[i-1];
for(;;) {
if(pattern.charAt(j) == pattern.charAt(i-1)) {
f[i] = j +1;
break;
}
if(j==0) {
f[i] = 0;
break;
}
j = f[j];
}
}
}
dfa(pattern);
int n = text.length();
int m = pattern.length();
int i = 0;
int j = 0;
for(;;) {
if(i == n) break;
if(text.charAt(i) == pattern.charAt(j)) {
j++;
i++;
if(j == m) return i;
}
else if(j > 0) j =f[j];
else i++;
}
return -1;
}
public static void main
(String[] args
) { Ideone kmp = new Ideone();
System.
out.
println(kmp.
match(text, pattern
)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUgewoJaW50W10gZjsKCXB1YmxpYyB2b2lkIGRmYShTdHJpbmcgcGF0dGVybikgewoJCWludCBtID0gcGF0dGVybi5sZW5ndGgoKTsKCQlmID0gbmV3IGludFttKzFdOwoJCWZbMF0gPSAwOwoJCWZbMV0gPSAwOwoJCWZvcihpbnQgaT0yOyBpPD1tOyBpKyspIHsKCQkJaW50IGogPSBmW2ktMV07CgkJCWZvcig7OykgewoJCQkJaWYocGF0dGVybi5jaGFyQXQoaikgPT0gcGF0dGVybi5jaGFyQXQoaS0xKSkgewoJCQkJCWZbaV0gPSBqICsxOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJaWYoaj09MCkgewoJCQkJCWZbaV0gPSAwOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJaiA9IGZbal07CgkJCX0KCQl9Cgl9CgkKCXB1YmxpYyBpbnQgbWF0Y2goU3RyaW5nIHRleHQsIFN0cmluZyBwYXR0ZXJuKSB7CgkJZGZhKHBhdHRlcm4pOwoJCWludCBuID0gdGV4dC5sZW5ndGgoKTsKCQlpbnQgbSA9IHBhdHRlcm4ubGVuZ3RoKCk7CgkJaW50IGkgPSAwOwoJCWludCBqID0gMDsKCQlmb3IoOzspIHsKCQkJaWYoaSA9PSBuKSBicmVhazsKCQkJaWYodGV4dC5jaGFyQXQoaSkgPT0gcGF0dGVybi5jaGFyQXQoaikpIHsKCQkJCWorKzsKCQkJCWkrKzsKCQkJCWlmKGogPT0gbSkgcmV0dXJuIGk7CgkJCX0KCQkJZWxzZSBpZihqID4gMCkgaiA9ZltqXTsKCQkJZWxzZSBpKys7CgkJfQoJCXJldHVybiAtMTsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCUlkZW9uZSBrbXAgPSBuZXcgSWRlb25lKCk7CgkJU3RyaW5nIHRleHQgPSAiQcSExJjEhkFCQSI7CgkJU3RyaW5nIHBhdHRlcm4gPSAixITEmMSGIjsKCQlTeXN0ZW0ub3V0LnByaW50bG4oa21wLm1hdGNoKHRleHQsIHBhdHRlcm4pKTsKCX0KfQo=