#include <bits/stdc++.h>
using namespace std;
long long T;
const long long MOD=1e9+7,MAXN=1e6+5;
long long inv[1000005],fac[1000005],gett[1000005];
long long C(long long n,long long m,long long p)
{
if (n<m) return 0;
return fac[n]*inv[m]%p*inv[n-m]%p;
}
long long mul(long long x,long long k){
long long res = 1;
while(k){
if(k&1) res = ( res * x ) % MOD;
x = (x*x) % MOD;
k>>=1;
}
return res;
}
void pre()
{
gett[1] = 0;
gett[2] = 1;
fac[1] = 1;
inv[0] = inv[1] = 1;
for(long long i = 3;i < MAXN;++ i)
gett[i] = (i-1) * (gett[i-1] + gett[i-2]) % MOD;
for(long long i = 2;i < MAXN;++ i)
{
fac[i] = fac[i-1] * i % MOD;
inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
}
for(long long i = 1;i < MAXN;++ i)
inv[i] = inv[i-1] * inv[i] % MOD;
return;
}
int main()
{
pre();
cin>>T;
while (T--)
{
long long n,m;
cin>>n>>m;
if (n==m)
{
cout<<1<<'\n';
continue;
}
long long tmp=gett[n-m];
cout<<C(n,m,MOD)*tmp<<'\n';
}
return 0;
}