「PMOI-1」抽奖
令
组合意义即为,不选的情况数——每张卡都能随便抽,加上选卡的情况数——卡的种类
所以答案就是
容易发现就是三个等比数列,随便求一下和即可。
#include<stdio.h>
#define ll long long
#define N 100007
#define Mod 1000000007
inline int read(){
int x=0,flag=1; char c=getchar();
while(c<'0'||c>'9'){if(c=='-') flag=0;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-48;c=getchar();}
return flag? x:-x;
}
ll qpow(ll x,ll y){
ll ret=1,cnt=0;
while(y>=(1LL<<cnt)){
if(y&(1LL<<cnt)) ret=(ret*x)%Mod;
x=(x*x)%Mod,cnt++;
}
return ret;
}
ll calc(ll x,ll y){
if(!x) return 1;
if(x==1) return (y+1)%Mod;
return (qpow(x,y+1)-1+Mod)%Mod*qpow((x-1+Mod)%Mod,Mod-2)%Mod;
}
int main(){
int T=read();
while(T--){
ll n=read(),m=read();
ll ans=(calc(n,m)+calc(n,m+1)-1-n*calc(n-1,m)%Mod+Mod)%Mod;
printf("%lld\n",ans);
}
}