Problem:
Score : 400 points

Problem Statement

You are given positive integers N and M.

How many sequences a of length N consisting of positive integers satisfy a_1 \times a_2 \times ... \times a_N = M? Find the count modulo 10^9+7.

Here, two sequences a' and a'' are considered different when there exists some i such that a_i' \neq a_i''.

Constraints

All values in input are integers.

1 \leq N \leq 10^5

1 \leq M \leq 10^9

Input

Input is given from Standard Input in the following format:

N M

Output

Print the number of the sequences consisting of positive integers that satisfy the condition, modulo 10^9 + 7.

Sample Input 1

2 6

Sample Output 1

4

Four sequences satisfy the condition: \{a_1, a_2\} = \{1, 6\}, \{2, 3\}, \{3, 2\} and \{6, 1\}.

Sample Input 2

3 12

Sample Output 2

18

Sample Input 3

100000 1000000000

Sample Output 3

957870001

Solution in PyPy3 (2.4.0) (judge verdict: Accepted)

import math
import time

TEST = True
TEST = False


MOD = 10**9+7
n, m = map(int, input().split())
#start = time.time()

fac = [1, 1]
finv = [1, 1]
inv = [0, 1]

for i in range(2, 150000):
    fac.append(fac[i-1] * i % MOD)
    inv.append((MOD-inv[MOD%i]*(MOD//i)) % MOD)
    finv.append(finv[i-1]*inv[i]%MOD)


def binom(n, k):
    ans = (fac[n] * finv[n-k]) % MOD
    return (ans * finv[k]) % MOD


ans = 1
y = m
x = 1
while y > 1:
    if x*x > y:
        ans = (ans*binom(n,1)) % MOD
        break
    x += 1
    exp = 0
    while y % x == 0:
        y /= x
        exp += 1
    ans = (ans*binom(exp+n-1, exp)) % MOD
    if TEST:
        print("x = " + str(x) + ", ans = " + str(ans) )

print(ans)

#runTime = time.time() - start
#print("My answer is  " + str(ans))
#print("The running time is " + str(runTime) + " sec")