尴尬的发现
8388608=223
8388608
=
2
23
于是i从1到23就够了,100010*25 不会超
#include <bits/stdc++.h>
using namespace std ;
#define rep(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define REP(i,a,b) for (int (i)=(a);(i)>=(b);(i)--)
#define Rep(i,x) for (int (i)=head[x];(i);i=next[i])
#define lowbit(x) ((x)&(-(x)))
#define sqr(x) ((x)*(x))
#define clr(a) memset((a),0,sizeof((a)))
#define ls ((x)<<1)
#define rs ((x)<<1|1)
#define mid (((l)+(r))>>1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
typedef long long ll ;
const int mod = 8388608 ;
int c[100010][30] ;
int T,n,k ;
int a[30];
inline void judge(){
freopen("data.txt","r",stdin);
freopen("data.txt","w",stdout);
}
inline void init(){
for (int i=0;i<=100000;i++){
c[i][0]=1;
for (int j=1;j<=min(i,23);j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
}
void solve(){
int ans=0 ;
for (int i=1;i<=min(k,23);i++){
ans=(ans+1LL*((1<<(i-1))%mod)*i*c[n][i])%mod;
}
printf("%d\n",ans) ;
}
int main(){
init() ;
scanf("%d",&T) ;
while(T--){
scanf("%d%d",&n,&k) ;
solve() ;
}
}