import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Scanner; class Main { public static void main(String[] args) throws Exception { new Main().run(); } final long MOD=(long)1e9+7; long pow(long a,long n) { long ret=1; for(;n>0;n>>=1,a=a*a%MOD)if(n%2==1)ret=ret*a%MOD; return ret; } long inv(long a) { return pow(a,MOD-2); } long solve(long p,int e) { long[][] dp=new long[e+1][e+1];//dp[i][j]:=i個使用済み,p^jまで見た。 dp[0][0]=1; for(int i=0;ie)continue; //(Z/p^k)^l long add=1; for(int m=0;m0) ans=ans*solve(div,e)%MOD; } ans=ans*fac%MOD; System.out.println(ans); } static void tr(Object... objects) { System.out.println(Arrays.deepToString(objects)); } }