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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define x first
#define y second
#define ll long long
#define pii pair<int,int>
#define pb push_back
#define all(x) x.begin(),x.end()
#define endl '\n'
#define int long long
const ll mod=1000000007;
ll Pow(ll a,ll b){
	ll x=1%mod;
	while(b){
		if(b&1)x=(x*a)%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return x;
}
ll f[100010];
ll inv[100010];

ll NCR(int a,int b){
	ll ans=f[a];
	ans*=inv[b];
	ans%=mod;
	ans*=inv[a-b];
	ans%=mod;
	return ans;
}

int32_t main()
{
	f[0]=1;
	for(ll i=1;i<100010;i++){
		f[i]=(f[i-1]*1LL*i)%mod;
	}
	inv[100010-1]=Pow(f[100010-1],mod-2);
	for(ll i=100010-2;i>=0;i--){
		inv[i]=(inv[i+1]*1LL*(i+1))%mod;
	}
	int n,m;
	cin>>n>>m;
	ll ans=1;
	for(int i=2;i*i<=m;i++){
		int c=0;
		while(m%i==0){
			m/=i;
			c++;
		}
		if(c){
			ans=(ans*NCR(c+n-1,c))%mod;
		}
	}
	if(m!=1){
		ans=(ans*NCR(1+n-1,1))%mod;
	}
	cout<<ans<<endl;
	return 0;
}