Smith Waterman algorithm