# your code goes here
import numpy as np
#import time
#import sys
import functools
from math import sqrt
#print(f' sys.getrecursionlimit()={sys.getrecursionlimit()}')
#sys.setrecursionlimit(1001)
MAXSIZE = 1000000000
m = np.zeros(MAXSIZE+1, dtype=np.int16)
#@functools.lru_cache(maxsize=None)
def f(x, level=0, curmin = MAXSIZE) -> int:
if level > curmin: return -1 # Отсечение - нет смысла лезть вглубь
# при наличии более короткого решения
if x == 1: return 0
if m[x]: return m[x] # Сохраненное значение
res = MAXSIZE;
for i in range(int(sqrt(x))+1, 0, -1):
if x%i: continue;
k = f(i+x//i-2, level+1, res);
if k < 0: continue;
if k < res: res = k
m[x] = res+1
return m[x]
n = int(input("дай целое!"))
#t0 = time.clock()
rez = f(n)
#t1 = time.clock()
print( n, ": ", rez)
cur = m[n]
while n>1:
for i in range(1,int(sqrt(n))+1):
if n%i: continue
if m[i+n//i-2] == cur-1:
n = i+n//i-2
cur -=1
print(i, end=' ')
break
print("")
#print (t1-t0)
#print(f.cache_info())
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmltcG9ydCBudW1weSBhcyBucAojaW1wb3J0IHRpbWUKI2ltcG9ydCBzeXMKaW1wb3J0IGZ1bmN0b29scyAKZnJvbSBtYXRoIGltcG9ydCBzcXJ0CgojcHJpbnQoZicgc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCk9e3N5cy5nZXRyZWN1cnNpb25saW1pdCgpfScpCiNzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAwMSkKCk1BWFNJWkUgPSAxMDAwMDAwMDAwCm0gPSBucC56ZXJvcyhNQVhTSVpFKzEsIGR0eXBlPW5wLmludDE2KQoKI0BmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKZGVmIGYoeCwgbGV2ZWw9MCwgY3VybWluID0gTUFYU0laRSkgLT4gaW50OgoKICAgIGlmIGxldmVsID4gY3VybWluOiByZXR1cm4gLTEgIyDQntGC0YHQtdGH0LXQvdC40LUgLSDQvdC10YIg0YHQvNGL0YHQu9CwINC70LXQt9GC0Ywg0LLQs9C70YPQsdGMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyDQv9GA0Lgg0L3QsNC70LjRh9C40Lgg0LHQvtC70LXQtSDQutC+0YDQvtGC0LrQvtCz0L4g0YDQtdGI0LXQvdC40Y8KICAgIGlmIHggPT0gMTogcmV0dXJuIDAKICAgIGlmIG1beF06IHJldHVybiBtW3hdICAgICAgIyDQodC+0YXRgNCw0L3QtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUKICAgIAogICAgcmVzID0gTUFYU0laRTsKICAgIGZvciBpIGluIHJhbmdlKGludChzcXJ0KHgpKSsxLCAwLCAtMSk6CiAgICAgICAgaWYgeCVpOiBjb250aW51ZTsKICAgICAgICBrID0gZihpK3gvL2ktMiwgbGV2ZWwrMSwgcmVzKTsKICAgICAgICBpZiBrIDwgMDogY29udGludWU7CiAgICAgICAgaWYgayA8IHJlczogIHJlcyA9IGsKICAgICAgICBtW3hdID0gcmVzKzEKICAgIHJldHVybiBtW3hdCgpuID0gaW50KGlucHV0KCLQtNCw0Lkg0YbQtdC70L7QtSEiKSkKI3QwID0gdGltZS5jbG9jaygpCnJleiA9IGYobikKI3QxID0gdGltZS5jbG9jaygpCnByaW50KCBuLCAiOiAiLCByZXopCgpjdXIgPSBtW25dCndoaWxlIG4+MToKICAgIGZvciBpIGluIHJhbmdlKDEsaW50KHNxcnQobikpKzEpOgogICAgICAgIGlmIG4laTogY29udGludWUKICAgICAgICBpZiBtW2krbi8vaS0yXSA9PSBjdXItMToKICAgICAgICAgICAgbiA9IGkrbi8vaS0yCiAgICAgICAgICAgIGN1ciAtPTEKICAgICAgICAgICAgcHJpbnQoaSwgZW5kPScgJykKICAgICAgICAgICAgYnJlYWsKcHJpbnQoIiIpCgojcHJpbnQgKHQxLXQwKQojcHJpbnQoZi5jYWNoZV9pbmZvKCkpCg==