Given the number *n*, find the smallest positive integer which has exactly *n* divisors. It is guaranteed that for the given *n* the answer will not exceed 10<sup class="upper-index">18</sup>.
The first line of the input contains integer *n* (1 ≤ *n* ≤ 1000).
import math
p = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43]
 
def solve(n, pos):
    ans = [1, 10 ** 18][n > 1] # si n>1 ans = 10**18 sino ans =1 dado que solo se necesita 1 divisor y solo 1 cumple tener un unico divisor
    for exp in range(2, n + 1): 
        if n % exp == 0: # analizamos los posibles exponentes como se calculo matematicamente no tiene sentido pregunta por un exponente que no cumpla que (exp+1)|n
            ans = min(ans, p[pos] ** (exp - 1) * solve(n // exp, pos + 1)) # ans queda siendo la menor de las respuestas hasta ahora o la nueva respuesta
                                                                           # calculada mediante el primo que se esta analizando elevado al exponente -1
                                                                           #  * solve en los divisores restantes n/exp y cambiando la pos para analiar el primo siguiente
    return ans
inp = int(input())
print(solve(inp, 0))






