def era(num):

    input_list = [False if i % 2 == 0 or i % 3 == 0 or i % 5 == 0 else True for i in range(num)]

    input_list[0] = input_list[1] = False

    input_list[2] = input_list[3] = input_list[5] = True

    sqrt = num**0.5



    for serial in range(3, num, 2):



        if serial >= sqrt:

            return input_list



        for s in range(serial ** 2, num, serial): 

            input_list[s] = False



N=int(eval(input()))

if N<25:

    Prime=[2,3,5]

else:

    input_list=era(int(N**0.5)+1)

    Prime=[i for i, b in enumerate(input_list) if b == True]



Fac={}

for p in Prime:

    while N%p==0:

        N//=p

        if p in Fac:

            Fac[p]+=1

        else:

            Fac[p]=1

    if N==1:

        break

if N!=1:

    Fac[N]=1

ans=0



for k in Fac:

    nec=1

    while True:

        if Fac[k]>=nec:

            ans+=1

            Fac[k]-=nec

            nec+=1

        else:

            break



print(ans)
N=int(eval(input()))

F={}

for i in range(2,int(N**0.5)+1):

    if N%i==0:

        F[i]=1

        N//=i

    while N%i==0:

        N//=i

        F[i]+=1

if N>1:

    F[N]=1



ans=0

for f in F:

    j=1

    while True:

        F[f]-=j

        j+=1

        if F[f]>=0:

            ans+=1

        else:

            break

print(ans)
def era(num):
    input_list = [
        False if i % 2 == 0 or i % 3 == 0 or i % 5 == 0 else True for i in range(num)
    ]
    input_list[0] = input_list[1] = False
    input_list[2] = input_list[3] = input_list[5] = True
    sqrt = num**0.5
    for serial in range(3, num, 2):
        if serial >= sqrt:
            return input_list
        for s in range(serial**2, num, serial):
            input_list[s] = False


N = int(eval(input()))
if N < 25:
    Prime = [2, 3, 5]
else:
    input_list = era(int(N**0.5) + 1)
    Prime = [i for i, b in enumerate(input_list) if b == True]
Fac = {}
for p in Prime:
    while N % p == 0:
        N //= p
        if p in Fac:
            Fac[p] += 1
        else:
            Fac[p] = 1
    if N == 1:
        break
if N != 1:
    Fac[N] = 1
ans = 0
for k in Fac:
    nec = 1
    while True:
        if Fac[k] >= nec:
            ans += 1
            Fac[k] -= nec
            nec += 1
        else:
            break
print(ans)

N = int(eval(input()))
F = {}
for i in range(2, int(N**0.5) + 1):
    if N % i == 0:
        F[i] = 1
        N //= i
    while N % i == 0:
        N //= i
        F[i] += 1
if N > 1:
    F[N] = 1
ans = 0
for f in F:
    j = 1
    while True:
        F[f] -= j
        j += 1
        if F[f] >= 0:
            ans += 1
        else:
            break
print(ans)

-def era(num): -    input_list = [ -        False if i % 2 == 0 or i % 3 == 0 or i % 5 == 0 else True for i in range(num) -    ] -    input_list[0] = input_list[1] = False -    input_list[2] = input_list[3] = input_list[5] = True -    sqrt = num**0.5 -    for serial in range(3, num, 2): -        if serial >= sqrt: -            return input_list -        for s in range(serial**2, num, serial): -            input_list[s] = False - - -if N < 25: -    Prime = [2, 3, 5] -else: -    input_list = era(int(N**0.5) + 1) -    Prime = [i for i, b in enumerate(input_list) if b == True] -Fac = {} -for p in Prime: -    while N % p == 0: -        N //= p -        if p in Fac: -            Fac[p] += 1 -        else: -            Fac[p] = 1 -    if N == 1: -        break -if N != 1: -    Fac[N] = 1 +F = {} +for i in range(2, int(N**0.5) + 1): +    if N % i == 0: +        F[i] = 1 +        N //= i +    while N % i == 0: +        N //= i +        F[i] += 1 +if N > 1: +    F[N] = 1 -for k in Fac: -    nec = 1 +for f in F: +    j = 1 -        if Fac[k] >= nec: +        F[f] -= j +        j += 1 +        if F[f] >= 0: -            Fac[k] -= nec -            nec += 1