Duff is in love with lovely numbers! A positive integer *x* is called lovely if and only if there is no such positive integer *a* &gt; 1 such that *a*<sup class="upper-index">2</sup> is a divisor of *x*.

Malek has a number store! In his store, he has only divisors of positive integer *n* (and he has all of them). As a birthday present, Malek wants to give her a lovely number from his store. He wants this number to be as big as possible.

Malek always had issues in math, so he asked for your help. Please tell him what is the biggest lovely number in his store.
The first and only line of input contains one integer, *n* (1 ≤ *n* ≤ 10<sup class="upper-index">12</sup>).
import sys
from collections import defaultdict
import math
from functools import reduce


VALID = {2, 3, 5}

def get_sieve(n) -> tuple[list[int], list[int]]:
    # O(nloglog(n) bc of sum of reciprocals
    sieve = [1] * (n + 1)
    primes = []
    sieve[0] = sieve[1] = 0
    for i in range(2, n + 1):
        if sieve[i] == 1:
            for j in range(i * i, n + 1, i):
                sieve[j] = 0
            primes.append(i)
    return sieve, primes

def get_unique_factors(x, sieve, primes) -> set[int]:
    if x < len(sieve) and sieve[x]:
        return {x}
    unique_factors = set()
    for prime in primes:
        # We only consider factors that are <= sqrt(n) bc we are guaranteed that n will have a factor
        if prime * prime > x:
            break
        while x % prime == 0:
            x //= prime
            unique_factors.add(prime)
    if x > 1:
        unique_factors.add(x)
    return unique_factors

def main() -> None:
    read = sys.stdin.readline
    a = int(read())
    if a == 1:
        print(1)
        return
    sieve, factors = get_sieve(int(math.sqrt(a)))
    factors = get_unique_factors(a, sieve, factors)
    total = 1
    for factor in factors:
        total *= factor
    print(total)





if __name__ == '__main__':
    main()