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 Java8 (OpenJDK 1.8.0) (judge verdict: Runtime Error)

import java.util.*;

public class Main {
	final int MAX = 1000000009;
	Scanner sc = new Scanner(System.in);
	boolean[] makePrime(int m) {
		boolean[] a = new boolean[m + 1];
		Arrays.fill(a, true);
		a[0] = false;
		a[1] = false;
		for(int i = 2; i * i <= m; i++) {
			if(a[i]) {
				for(int j = i * 2; j <= m; j += i) {
					a[j] = false;
 				}
			}
		}
		return a;
	}
	void doIt() {
		int n = sc.nextInt();
		int m = sc.nextInt();
		boolean[] prime = makePrime(m);
		int[] factor = new int[m + 1];
		Arrays.fill(factor, 0);
		long sum = 1, mm = m;
		int a[] = new int[m + 1];
		int idx = 0;
		for(int i = 2; i <= m && mm != 1; i++) {
			//System.out.println(mm);
			int num = 0;
			while(mm % i == 0) {
				mm /= i;
				num++;
			}
			sum = sum * h(n, num) % MAX ;
		}
		System.out.println(sum);
	}
	long h(int n, int r){
		double ans = 1;
		for(int i = r; i >= 1; i--) {
			ans = ans * (n + i - 1) / i;
		}
		//System.out.println(n + " " +  r + " "+  ans);
		return (long)ans;
	}
	Main(){doIt();}
	public static void main(String[] args) {
		new Main();
	}

}