import math
n = int(input()) #число элементов в списке [1, 2, 3 ... n]
k = int(input()) #число элементов в размещении
m = int(input()) #номер размещения
permutation = list(range(1, n + 1))
result = []
while k != 0:
a = math.factorial(n)/math.factorial(n-k) #количество размещений из n по m
l = int(((n*m-1)//a) + 1)
result.append(permutation.pop(l-1))
m = m - (l-1)*a/n
n = n - 1
k = k - 1
print(' '.join(map(str, result)))
Не очень понял ход решения, если есть возможность, можете привести решения для данных: N = 9, K = 2, M = 20(номер размещения в лексикографическом порядке).
import math
n = int(input())
k = int(input()) - 1
permutation = list(range(1, n + 1))
result = []
for i in range(n, 0, -1):
index = k//math.factorial(i-1)
k = k % math.factorial(i-1)
result.append(permutation.pop(index))
print(' '.join(map(str, result)))