    char *search( k, pat, text, n )   /*** at most k errors ***/
    int k, n;
    char *pat, *text;

    {   int T[MAXPATLEN+1];
        int i, j, m, tj, tj1;

        m = strlen( pat );
        if( m <= k ) return( text + n );
        T[0] = 0;                              /*** initial values ***/
        for( j=1; j<=m; j++ ) T[j] = j;

        for( i=1; i<=n; i++ ) {                /*** search ***/
             tj1 = 0;
             for( j=1; j<=m; j++ ) {
                  tj = T[j];
                  if( text[n-i] != pat[m-j] ) tj1++;
                  if( tj+1 < tj1 ) tj1 = tj+1;
                  if( T[j-1]+1 < tj1 ) tj1 = T[j-1]+1;
                  T[j] = tj1;
                  tj1 = tj;
                  }
             if( T[m] <= k ) return( text+n-i );
             }
        return( NULL );
    }
