#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
#define mv 2713
int C[3000][3000] ;
void preprocess(){
for(int i = 0 ; i < mv+5 ; i++) C[i][0] = 1 % mv ;
for(int i = 1 ; i < mv+5 ; i++)
for(int j = 1 ; j <= i ; j++)
C[i][j] = (C[i-1][j] + C[i-1][j-1]) % mv ;
}
vector <int> convert(ll n, ll base){
vector <int> num ; num.clear() ;
while(n){
num.push_back( (int)(n % base) ) ;
n /= base ;
}
return num ;
}
void solve(){
ll n, r ; cin >> n >> r ;
n = (n*(n-1)) / 2 ;
vector <int> n1 = convert(n, mv) , n2 = convert(r, mv) ;
int ans = 1 ;
for(int i = 0 ; i < n1.size() ; i++){
if(i >= n2.size()){
break ;
} else{
ans = ( ans * C[ n1[i] ][ n2[i] ] ) % mv ;
}
}
cout << ans << "\n" ;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input1.txt", "r", stdin) ;
freopen("output.txt", "w", stdout) ;
#endif
ios::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ;
preprocess() ;
int t ; cin >> t ;
while(t--) solve() ;
return 0 ;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQgOwp0eXBlZGVmIGxvbmcgbG9uZyBsbCA7CgojZGVmaW5lIG12IDI3MTMKCmludCBDWzMwMDBdWzMwMDBdIDsKCnZvaWQgcHJlcHJvY2VzcygpewoKCWZvcihpbnQgaSA9IDAgOyBpIDwgbXYrNSA7IGkrKykgQ1tpXVswXSA9IDEgJSBtdiA7CgoJZm9yKGludCBpID0gMSA7IGkgPCBtdis1IDsgaSsrKQoJCWZvcihpbnQgaiA9IDEgOyBqIDw9IGkgOyBqKyspCgkJCUNbaV1bal0gPSAoQ1tpLTFdW2pdICsgQ1tpLTFdW2otMV0pICUgbXYgOwoKfQoKdmVjdG9yIDxpbnQ+IGNvbnZlcnQobGwgbiwgbGwgYmFzZSl7CgoJdmVjdG9yIDxpbnQ+IG51bSA7IG51bS5jbGVhcigpIDsKCgl3aGlsZShuKXsKCQludW0ucHVzaF9iYWNrKCAoaW50KShuICUgYmFzZSkgKSA7CgkJbiAvPSBiYXNlIDsKCX0KCglyZXR1cm4gbnVtIDsKCn0KCnZvaWQgc29sdmUoKXsKCglsbCBuLCByIDsgY2luID4+IG4gPj4gciA7CgluID0gKG4qKG4tMSkpIC8gMiA7CgoJdmVjdG9yIDxpbnQ+IG4xID0gY29udmVydChuLCBtdikgLCBuMiA9IGNvbnZlcnQociwgbXYpIDsKCglpbnQgYW5zID0gMSA7Cglmb3IoaW50IGkgPSAwIDsgaSA8IG4xLnNpemUoKSA7IGkrKyl7CgkJaWYoaSA+PSBuMi5zaXplKCkpewoJCQlicmVhayA7CgkJfSBlbHNlewoJCQlhbnMgPSAoIGFucyAqIENbIG4xW2ldIF1bIG4yW2ldIF0gKSAlIG12IDsKCQl9Cgl9CgoJY291dCA8PCBhbnMgPDwgIlxuIiA7Cgp9CgppbnQgbWFpbigpewoKCSNpZm5kZWYgT05MSU5FX0pVREdFCglmcmVvcGVuKCJpbnB1dDEudHh0IiwgInIiLCBzdGRpbikgOwoJZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KSA7CgkjZW5kaWYKCglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKSA7IGNpbi50aWUoMCkgOyBjb3V0LnRpZSgwKSA7CgoJcHJlcHJvY2VzcygpIDsKCglpbnQgdCA7IGNpbiA+PiB0IDsKCXdoaWxlKHQtLSkgc29sdmUoKSA7CgoJcmV0dXJuIDAgOwp9Cg==