code: private void trCopy(int ISA, int first, int a, int b, int last, int depth) {
          int c, d, e;// ptr
          int s, v;
  
          v = b - 1;
          for (c = first, d = a - 1; c <= d; ++c) {
              s = SA[c] - depth;
              if ((0 <= s) && (SA[ISA + s] == v)) {
                  SA[++d] = s;
                  SA[ISA + s] = d;
              }
          }
          for (c = last - 1, e = d + 1, d = b; e < d; --c) {
              s = SA[c] - depth;
              if ((0 <= s) && (SA[ISA + s] == v)) {
                  SA[--d] = s;
                  SA[ISA + s] = d;
              }
          }
      }
docs: sort suffixes of middle partition by using sorted order of suffixes of left and
  right partition.