PROCEDURE KMPSCAN (P,S :STRNG; M,N:INTEGER ) ; VAR I,J:INTEGER; BEGIN I:=1; J:=1; WHILE I<=N DO WHILE (J<>0) AND (P[J]<>S[I]) DO BEGIN J:=FLINK[J]; END; IF J=M THEN WRITE (LST,'SUCCESS'); FOR I:=1 TO N DO FOR J:=1 TO N DO BEGIN I:=I+1; J:=J+1 END ; WRITE (LST,'FAILURE'); END; FUNCTION GETSTR (VAR S:STRNG):INTEGER; VAR I:INTEGER; BEGIN I:=1; WHILE (NOT EOF) AND (NOT EOLN) DO BEGIN READ (S[I]); I:=I+1 END; READ(S[I]); GETSTR:=I-1 END;