int jc[M];
int f[M];int ksm(int a,int b){int res=1;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res%mod;
}
int c(int a,int b){return jc[a]%mod*ksm(jc[b]*jc[a-b]%mod,mod-2)%mod;
}
int lucas(int a,int b){if(!b)return 1;return (lucas(a/mod,b/mod)*c(a%mod,b%mod))%mod;
}
int n,m;
void solve(){cin>>n>>m;if(n==m){cout<<1<<endl;}else if(n-m==1){cout<<0<<endl; }else if(m==0){cout<<f[n]<<endl;}else{int ans= (f[n-m]%mod*lucas(n,m))%mod;cout<<ans<<endl;}
}signed main()
{ios::sync_with_stdio(false),cin.tie(0);cout.tie(0);int T=1;cin>>T;f[1]=0;f[2]=1;jc[1]=1;jc[2]=2;for(int i=3;i<=1e6;i++){f[i]=((i-1)*(f[i-1]+f[i-2])%mod)%mod;jc[i]=jc[i-1]*i%mod;}while(T--){solve();}return 0;
}