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 Haskell (GHC 7.10.3) (judge verdict: Accepted)

import Data.List

base = 10^9+7 :: Integer

mulmod a b = (a * b) `mod` base

powmod a n = f 1 n a
  where
    f r 0 _ = r
    f r n t = f (if odd n then mulmod r t else r) (div n 2) (mulmod t t)

invmod a = powmod a (base - 2)

combmod n k = let k' = min k (n-k) in mulmod (foldl mulmod 1 [n-k'+1..n]) (foldl mulmod 1 $ map invmod [1..k'])

combwrmod n k = combmod (n+k-1) k

factor n = f n (2:[3,5..])
  where
    f 1 _ = []
    f n pa@(p:ps)
     | r==0 = p : f q pa
     | n<p*p = [n]
     | otherwise = f n ps
      where
        (q, r) = divMod n p

main = map read . words <$> getLine >>= \[n, m] -> print $ foldl mulmod 1 $ map (combwrmod n . genericLength) $ group $ factor m