Розробити функції для обчислень перестановок, розміщень та сполучень(і їх варіантів з повтореннями).
Для їх створення використати власну функцію factorial(n), для обчислення факторіала, сторонні модулі використовувати заборонено.
Функція permutations(n) обчислює кількість перестановок множини, довжиною n.
Функція combinations(n, r) обчислює кількість сполучень множини, довжиною n в r елементів.
Функція variations(n, r) обчислює кількість розміщень множини, довжиною n в r елементів.
Функція combinations_with_repetition(n, r) обчислює кількість сполучень з повтореннями множини, довжиною n в r елементів.
Функція variations_with_repetition(n, r) обчислює кількість розміщень з повтореннями множини, довжиною n в r елементів.