def euler_sieve(x):
    isprime = [True]*(x+2)
    primes = []
    for i in range(2,x+1):
        if isprime[i]:
            primes.append(i)
        for j in primes:
            if j*i > x:
                break
            isprime[j*i] = False
            if i%j == 0:
                break
    return primes


n = int(input())
l = []
primes = euler_sieve(int(n**0.5)+3)
index = 0
maxindex = len(primes)-1
while n != 1 and index != maxindex:
    if n%primes[index] == 0:
        n //= primes[index]
        l.append(primes[index])
    else:
        index += 1
if n != 1:
    l.append(n)
print(" ".join(map(str,l)))