add KMP
add KMP