from math import sqrt, floor

from collections import deque





def prime_generator():

    prime = set()

    yield 2

    i = 3

    while True:

        for d in prime:

            if not (i % d):

                break

        else:

            yield i

            prime.add(i)

        i += 2





nstr = eval(input())

n = int(nstr)

limit = floor(sqrt(n))

a = deque()



for p in prime_generator():

    if p > limit:

        if n > 1:

            a.append(n)

        break

    while not (n % p):

        a.append(p)

        n = n // p

        limit = floor(sqrt(n))



a.appendleft(nstr + ':')

print((*a))
from math import sqrt, floor

from collections import deque





def divide_repeat(p):

    global n, a, limit

    while not (n % p):

        a.append(p)

        n = n // p

        limit = floor(sqrt(n))





nstr = input()

n, p = int(nstr), 3

limit = floor(sqrt(n))

a, i = deque(), 3



divide_repeat(2)



while p <= limit:

    divide_repeat(p)

    p += 2



if n > 1:

    a.append(n)



print(nstr + ': ', end='')

print(*a)

from math import sqrt, floor
from collections import deque


def prime_generator():
    prime = set()
    yield 2
    i = 3
    while True:
        for d in prime:
            if not (i % d):
                break
        else:
            yield i
            prime.add(i)
        i += 2


nstr = eval(input())
n = int(nstr)
limit = floor(sqrt(n))
a = deque()
for p in prime_generator():
    if p > limit:
        if n > 1:
            a.append(n)
        break
    while not (n % p):
        a.append(p)
        n = n // p
        limit = floor(sqrt(n))
a.appendleft(nstr + ":")
print((*a))

from math import sqrt, floor
from collections import deque


def divide_repeat(p):
    global n, a, limit
    while not (n % p):
        a.append(p)
        n = n // p
        limit = floor(sqrt(n))


nstr = input()
n, p = int(nstr), 3
limit = floor(sqrt(n))
a, i = deque(), 3
divide_repeat(2)
while p <= limit:
    divide_repeat(p)
    p += 2
if n > 1:
    a.append(n)
print(nstr + ": ", end="")
print(*a)

-def prime_generator(): -    prime = set() -    yield 2 -    i = 3 -    while True: -        for d in prime: -            if not (i % d): -                break -        else: -            yield i -            prime.add(i) -        i += 2 - - -nstr = eval(input()) -n = int(nstr) -limit = floor(sqrt(n)) -a = deque() -for p in prime_generator(): -    if p > limit: -        if n > 1: -            a.append(n) -        break +def divide_repeat(p): +    global n, a, limit -a.appendleft(nstr + ":") -print((*a)) + + +nstr = input() +n, p = int(nstr), 3 +limit = floor(sqrt(n)) +a, i = deque(), 3 +divide_repeat(2) +while p <= limit: +    divide_repeat(p) +    p += 2 +if n > 1: +    a.append(n) +print(nstr + ": ", end="") +print(*a)