//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
//#pragma GCC target("avx,tune=native")
// Anand Jaisingh
#include<bits/stdc++.h>
using namespace std;
typedef complex<double> base;
typedef long double ld;
typedef long long ll;
#define pb push_back
#define pii pair<int,int>
#define pll pair< ll , ll >
#define vi vector<int>
#define vvi vector< vi >
const int maxn=(int)(1e3+5);
const ll mod=(ll)(1e9+7);
int fact[maxn],inv_fact[maxn];
int f[maxn][maxn];
inline int mul(ll a,ll b)
{
return (a*b)%mod;
}
inline int add(int a,int b)
{
int ret=a+b;
if(ret>=mod)
{
ret-=mod;
}
return ret;
}
inline int sub(int a,int b)
{
int ret=a-b;
if(ret<0)
{
ret+=mod;
}
return ret;
}
inline int poww(ll a,ll b)
{
int x=1,y=a;
while(b>0)
{
if(b%2)
{
x=mul(x,y);
}
y=mul(y,y);b/=2;
}
return (int)(x%mod);
}
void build()
{
f[1][0]=2;
for(int i=2;i<maxn;i++)
{
f[i][0]=2;
for(int j=1;j<maxn;j++)
{
f[i][j]=add(f[i-1][j],f[i-1][j-1]);
}
}
fact[0]=1;
for(int i=1;i<maxn;i++)
{
fact[i]=mul(fact[i-1],i);
}
inv_fact[maxn-1]=poww(fact[maxn-1],mod-2);
for(int i=maxn-2;i>=0;i--)
{
inv_fact[i]=mul(inv_fact[i+1],i+1);
}
}
int C(int n,int r)
{
if(n<r)
{
return 0;
}
int lower=n-r,curr=1;
while(n>lower)
{
curr=mul(curr,n);
n--;
}
return mul(curr,inv_fact[r]);
}
int main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
build();int t;cin>>t;
while(t>0)
{
int n,k,res=0;cin>>n>>k;
for(int i=0;i<k;i++)
{
// cout<<f[k][i]<<endl;
int now=mul(f[k][i],C(n-i,k));
res=add(res,now);
}
cout<<res<<endl;t--;
}
return 0;
}
ICAgIC8vI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0LG5vLXN0YWNrLXByb3RlY3RvciIpCiAgICAvLyNwcmFnbWEgR0NDIHRhcmdldCgic3NlLHNzZTIsc3NlMyxzc3NlMyxzc2U0LHBvcGNudCxhYm0sbW14IikKICAgIC8vI3ByYWdtYSBHQ0MgdGFyZ2V0KCJhdngsdHVuZT1uYXRpdmUiKQogICAgLy8gQW5hbmQgSmFpc2luZ2gKICAgICAKICAgICNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CiAgICAgCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgIAogICAgdHlwZWRlZiBjb21wbGV4PGRvdWJsZT4gYmFzZTsKICAgIHR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CiAgICB0eXBlZGVmIGxvbmcgbG9uZyBsbDsKICAgICAKICAgICNkZWZpbmUgcGIgcHVzaF9iYWNrCiAgICAjZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiAgICAjZGVmaW5lIHBsbCBwYWlyPCBsbCAsIGxsID4KICAgICNkZWZpbmUgdmkgdmVjdG9yPGludD4KICAgICNkZWZpbmUgdnZpIHZlY3RvcjwgdmkgPgogICAgIAogICAgY29uc3QgaW50IG1heG49KGludCkoMWUzKzUpOwogICAgY29uc3QgbGwgbW9kPShsbCkoMWU5KzcpOwogICAgaW50IGZhY3RbbWF4bl0saW52X2ZhY3RbbWF4bl07CiAgICBpbnQgZlttYXhuXVttYXhuXTsKICAgICAKICAgIGlubGluZSBpbnQgbXVsKGxsIGEsbGwgYikKICAgIHsKICAgICAgICByZXR1cm4gKGEqYiklbW9kOwogICAgfQogICAgIAogICAgaW5saW5lIGludCBhZGQoaW50IGEsaW50IGIpCiAgICB7CiAgICAgICAgaW50IHJldD1hK2I7CiAgICAgCiAgICAgICAgaWYocmV0Pj1tb2QpCiAgICAgICAgewogICAgICAgICAgICByZXQtPW1vZDsKICAgICAgICB9CiAgICAgCiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgICAKICAgIGlubGluZSBpbnQgc3ViKGludCBhLGludCBiKQogICAgewogICAgICAgIGludCByZXQ9YS1iOwogICAgIAogICAgICAgIGlmKHJldDwwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0Kz1tb2Q7CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICAgCiAgICBpbmxpbmUgaW50IHBvd3cobGwgYSxsbCBiKQogICAgewogICAgICAgIGludCB4PTEseT1hOwogICAgIAogICAgICAgIHdoaWxlKGI+MCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGIlMikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeD1tdWwoeCx5KTsKICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICB5PW11bCh5LHkpO2IvPTI7CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiAoaW50KSh4JW1vZCk7CiAgICB9CiAgICAgCiAgICAgCiAgICB2b2lkIGJ1aWxkKCkKICAgIHsKICAgICAgICBmWzFdWzBdPTI7CiAgICAgCiAgICAgICAgZm9yKGludCBpPTI7aTxtYXhuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZbaV1bMF09MjsKICAgICAKICAgICAgICAgICAgZm9yKGludCBqPTE7ajxtYXhuO2orKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZltpXVtqXT1hZGQoZltpLTFdW2pdLGZbaS0xXVtqLTFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAKICAgICAgICBmYWN0WzBdPTE7CiAgICAgCiAgICAgICAgZm9yKGludCBpPTE7aTxtYXhuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZhY3RbaV09bXVsKGZhY3RbaS0xXSxpKTsKICAgICAgICB9CiAgICAgCiAgICAgICAgaW52X2ZhY3RbbWF4bi0xXT1wb3d3KGZhY3RbbWF4bi0xXSxtb2QtMik7CiAgICAgCiAgICAgICAgZm9yKGludCBpPW1heG4tMjtpPj0wO2ktLSkKICAgICAgICB7CiAgICAgICAgICAgIGludl9mYWN0W2ldPW11bChpbnZfZmFjdFtpKzFdLGkrMSk7CiAgICAgICAgfQogICAgfQogICAgIAogICAgaW50IEMoaW50IG4saW50IHIpCiAgICB7CiAgICAgICAgaWYobjxyKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgIAogICAgICAgIGludCBsb3dlcj1uLXIsY3Vycj0xOwogICAgIAogICAgICAgIHdoaWxlKG4+bG93ZXIpCiAgICAgICAgewogICAgICAgICAgICBjdXJyPW11bChjdXJyLG4pOwogICAgIAogICAgICAgICAgICBuLS07CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiBtdWwoY3VycixpbnZfZmFjdFtyXSk7CiAgICB9CiAgICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApOwogICAgIAogICAgICAgIGJ1aWxkKCk7aW50IHQ7Y2luPj50OwogICAgIAogICAgICAgIHdoaWxlKHQ+MCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBuLGsscmVzPTA7Y2luPj5uPj5rOwogICAgIAogICAgICAgICAgICBmb3IoaW50IGk9MDtpPGs7aSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAvLyAgIGNvdXQ8PGZba11baV08PGVuZGw7CiAgICAgCiAgICAgICAgICAgICAgICBpbnQgbm93PW11bChmW2tdW2ldLEMobi1pLGspKTsKICAgICAKICAgICAgICAgICAgICAgIHJlcz1hZGQocmVzLG5vdyk7CiAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgY291dDw8cmVzPDxlbmRsO3QtLTsKICAgICAgICB9CiAgICAgCiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAg