impl kmp template