#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; long long degree( long a, long k, long p) { long res = 1; long cur = a; while (k) { if (k%2) { res = (res * cur)%p; } k /= 2; cur = (cur * cur) % p; } return res; } int get_degree( long n, long p) { // returns the degree with which p is in n! int degree_num = 0; long u = p; long temp = n; while (u <= temp) { degree_num += temp/u; u *= p; } return degree_num; } long factmod (long n, long p) { long res = 1; while (n > 1) { long long cur = 1; for (int i=2; i<p; ++i) cur = (cur * i) % p; res = (res * degree (cur, n/p, p)) % p; for (int i=2; i<=n%p; ++i) res = (res * i) % p; n /= p; } return (res % p); } long combinations( long n, long k, long p) { int num_degree = get_degree(n,p) - get_degree(n- k,p); int den_degree = get_degree(k,p); if (num_degree > den_degree) { return 0; } long res = factmod(n, p); long denom = factmod(k, p); long denom1 = factmod(n-k, p); res = (((res * degree(denom, p-2, p)) % p)*degree(denom1, p-2,p))%p; return res; } void solve( long houses, long visits) { long available = houses - 2*visits + 1; if(available < 0){ cout << 0 << '\n'; } else if (available == 0){ cout << 1 << '\n'; } else { cout << combinations(available+visits, visits, 100003) << '\n'; } } int main() { int inputs; cin >> inputs; for(int i=0; i<inputs; i++){ long houses, visits; cin >> houses >> visits; solve(houses, visits); } }