code: def next_permutation(tab):
      
      n = len(tab)
      pivot = None                         # find pivot
      for i in range(n - 1):
          if tab[i] < tab[i + 1]:
              pivot = i
      if pivot is None:                    # tab is already the last perm.
          return False
      for i in range(pivot + 1, n):        # find the element to swap
          if tab[i] > tab[pivot]:
              swap = i
      tab[swap], tab[pivot] = tab[pivot], tab[swap]
      i = pivot + 1
      j = n - 1                            # invert suffix
      while i < j:
          tab[i], tab[j] = tab[j], tab[i]
          i += 1
          j -= 1
      return True
docs: find the next permutation of tab in the lexicographical order
  
      :param tab: table with n elements from an ordered set
      :modifies: table to next permutation
      :returns: False if permutation is already lexicographical maximal
      :complexity: O(n)