#include using namespace std; const long long M = 1000000007; long long pw(long long a, long long b) { long long r = 1; while (b) { if (b & 1) r = r * a % M; a = a * a % M; b >>= 1; } return r; } long long fc(long long n) { if (n <= 1000000) { long long r = 1; for (long long i = 2; i <= n; i++) r = r * i % M; return r; } if (n > M / 2) { long long r = 1; for (long long i = n + 1; i < M; i++) r = r * i % M; return (M - 1) * pw(r, M - 2) % M; } else { long long r = 1; for (long long i = 2; i <= n; i++) r = r * i % M; return r; } } int main() { ios::sync_with_stdio(0); cin.tie(0); int T; cin >> T; while (T--) { string sC, sP; cin >> sC >> sP; bool big = false; if (sP.size() > 10) big = true; else if (sP.size() == 10 && sP >= "1000000007") big = true; if (big) { cout << 0 << "\n"; continue; } long long p = 0; for (char ch : sP) p = p * 10 + (ch - '0'); long long cm = 0; for (char ch : sC) cm = (cm * 10 + (ch - '0')) % M; bool ok = true; if (sC.size() > 10) ok = true; else { long long c = 0; for (char ch : sC) c = c * 10 + (ch - '0'); if (c < 2 * p - 1) ok = false; } if (!ok) { cout << 0 << "\n"; continue; } long long r = (cm - p + 1) % M; if (r < 0) r += M; if (r < p - 1) { cout << 0 << "\n"; continue; } long long ans; if (p <= 1000000) { ans = 1; for (long long i = 0; i < p; i++) { long long x = r - i; if (x < 0) x += M; ans = ans * x % M; } } else { long long a = fc(r); long long b = fc(r - p); ans = a * pw(b, M - 2) % M; } cout << ans << "\n"; } return 0; }