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: Wrong Answer)



import java.util.*;

class Main{
	
	public static void main (String args[]){
	Scanner sc= new Scanner(System.in);
	
	long N = sc.nextLong();
	long M = sc.nextLong();
	
	sc.close();
	
	long first = M;
	
	long count =0;
	
	//long fac = 0;
	
	long div = 1;
	
	long ans = 1;
	
	//ArrayList <Long> array = new ArrayList<>();
    //array.add((long)1);
    
    for(long i=2; i<=M;i++){
        if(i==M && M==first)break;
        if(M%i == 0){
          count=0;
          while (M%i==0){
            count++;
            M=M/i;
          }
          
          //System.out.println(count);
          ans = (ans*fac(count,N))%1000000007;
          
          count = 0;
          //System.out.println;
        }
     }
    
   
   System.out.println(ans);
    }
    
    public static long fac(long count,long N){
      if(count==1)return N;
      long k =factorial(count+N-1,N);
      long l =factorial(count, (long)1);
      //System.out.println(k +" "+l + " "+k/l%1000000007+" "+k/l);
      return (k/l)%1000000007;
      }
	
	
	public static long factorial (long num, long dest){
		if(num==dest){return dest;
		}else{
		return (num*factorial(num-1,dest));
		}
	}
	
	
}