refactoring
refactoring
refactoring
move exceptions to header
add kmpsearch with tests