add kmp codes