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++ (GCC 5.4.1) (judge verdict: Accepted)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

typedef long long ll;

#define MOD 1000000007

long long mod_pow(long long a, long long n, long long mod) {
    if (n == 0) {
        return 1;
    }
    long long t = mod_pow(a * a % mod, n / 2, mod);
    if (n % 2 != 0) {
        t = t * a % mod;
    }
    return t;
}

ll n, m;
vector<ll> q;

ll ans = 1;

int main() {
    cin >> n >> m;

    ll tmp = m;
    for (ll i = 2; i * i <= m; i++) {
        if (tmp % i == 0) {
            q.push_back(0);
        }
        while (tmp % i == 0) {
            q[q.size() - 1] += 1;
            tmp /= i;
        }
    }
    if (tmp > 1) {
        q.push_back(1);
    }

    for (int i = 0; i < q.size(); i++) {
        ll c = 1;
        for (int j = 1; j <= q[i]; j++) {
            c = c * (n + q[i] - j) % MOD * mod_pow(j, MOD - 2, MOD) % MOD;
        }
        ans = ans * c % MOD;
    }

    cout << ans << endl;

    return 0;
}