import sys
import math


def prime_gen(upper_bound):
    # 质数生成器函数
    remaining = set(range(2, upper_bound + 1)) # 生成集合存放待测试的数
    while remaining:
        i = min(remaining) # 取最小的数
        remaining.discard(i) 
        yield i
        not_prime = {num for num in remaining if num % i == 0 }
        remaining.difference_update(not_prime) # 从集合移除被 i 整除的数


number = int(sys.stdin.read())
result = list()
quotient = number

for prime_to_test in prime_gen(int(math.sqrt(number))):
    if prime_to_test * prime_to_test > quotient:
        break
    while quotient % prime_to_test == 0:
        quotient /= prime_to_test
        result.append(prime_to_test)

if quotient != 1:
    result.append(int(quotient))
output_str = ' '.join([str(p) for p in result])
print(output_str)