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 Python (3.4.3) (judge verdict: Wrong Answer)

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from collections import defaultdict


MOD = 10**9+7
FACT = [1 for _ in range(10**5*2)]
for i in range(1,10**5*2):
  FACT[i] = (FACT[i-1]*(i)) % MOD


def mul(a,b):
  return (a*b) % MOD

def power(a,b):
  ## 二分累乗法
  if   b==0   : return 1
  elif b==1   : return a % MOD
  elif b%2==0 : return power(a,b//2)**2 % MOD
  else        : return power(a,b//2)**2 * a % MOD

def div(a,b):
  ## MOD同士の割り算
  return mul(a,power(b,MOD-2))

def combi(a,b):
  return div(FACT[a]%MOD, (FACT[b]*FACT[a-b])%MOD)

def fact(m):
  ret = defaultdict(lambda:0)
  i = 2
  while m > i:
    if m%i == 0:
      ret[i] += 1
      m //= i
    else:
      i += 1
  ret[m] += 1
  return ret


def main():
  N,M = map(int, input().split())
  dct = fact(M)
  ans = 1
  for k in dct:
    ans = (ans * combi(dct[k]+N-1, N-1))%MOD
  print(ans)


if __name__ == "__main__":
  main()