code: def traverse_depth_first_post_order(self, callback):
          
          # a. Reimplement without python lists?..
          # b. Interface will require it to have not internal nodes only?..
          #    (but actually this implementation gives a ~2x gain of performance)
          last_interval = None
          n = len(self.suftab)
          stack = [[0, 0, None, []]]  # <l, i, j, children>
          for i in xrange(1, n):
              lb = i - 1
              while self.lcptab[i] < stack[-1][0]:
                  stack[-1][2] = i - 1
                  last_interval = stack.pop()
                  callback(last_interval)
                  lb = last_interval[1]
                  if self.lcptab[i] <= stack[-1][0]:
                      stack[-1][3].append(last_interval)
                      last_interval = None
              if self.lcptab[i] > stack[-1][0]:
                  if last_interval:
                      stack.append([self.lcptab[i], lb, None, [last_interval]])
                      last_interval = None
                  else:
                      stack.append([self.lcptab[i], lb, None, []])
          stack[-1][2] = n - 1
          callback(stack[-1])
docs: Visits the internal "nodes" of the enhanced suffix array in depth-first post-order.
  
          Kasai et. al. (2001), Abouelhoda et al. (2004).