code: def rank_permutation(r, n):
      
      fact = 1                                # compute (n-1) factorial
      for i in range(2, n):
          fact *= i
      digits = list(range(n))                 # all yet unused digits
      p = []                                  # build permutation
      for i in range(n):
          q = r // fact                       # by decomposing r = q * fact + rest
          r %= fact
          p.append(digits[q])
          del digits[q]                       # remove digit at position q
          if i != n - 1:
              fact //= (n - 1 - i)            # weight of next digit
      return p
docs: Given r and n find the permutation of {0,..,n-1} with rank according to lexicographical order equal to r
  
         :param r n: integers with 0 ≤ r < n!
         :returns: permutation p as a list of n integers
         :beware: computation with big numbers
         :complexity: `O(n^2)`