code: private void lsUpdateGroup(final int isa, final int first, final int last) {
          final int[] SA = this.SA;
  
          int a, b;
          int t;
  
          for (a = first; a < last; ++a) {
              if (0 <= SA[a]) {
                  b = a;
                  do {
                      SA[isa + SA[a]] = a;
                  } while (++a < last && 0 <= SA[a]);
                  SA[b] = b - a;
                  if (last <= a) {
                      break;
                  }
              }
              b = a;
              do {
                  SA[a] = ~SA[a];
              } while (SA[++a] < 0);
              t = a;
              do {
                  SA[isa + SA[b]] = t;
              } while (++b <= a);
          }
      }
docs: /*---------------------------------------------------------------------------