static final int maxn=(int)1e6+5;
static int mod=(int)1e9+7;
static long []fac=new long[maxn];
public static long _pow(long a,long t) {
long ans=1;
while(t>0) {
if((t&1)==1) ans=ans*a%mod;
a=a*a%mod;
t>>=1;
}
return ans;
}
public static long inv(long x) {
return _pow(x,mod-2);
}
public static void init() {
fac[0]=1;
for(int i=1;i<maxn;i++) {
fac[i]=fac[i-1]*(long)i%mod;
}
}
public static long C(int m,int i) {
long ans=0;
ans=fac[m]*inv(fac[m-i])%mod*inv(fac[i])%mod;
return ans;
}
public static int gcd(int a,int b) {
if(a<b) return gcd(b,a);
if(a%b==0)
return b;
return gcd(b,a%b);
}