#include <cstdio> #include <cstdlib> #include <algorithm> typedef unsigned long long ull; using namespace std; ull n, k; const ull PRIME = 100003; ull facto [PRIME+1]; ull invfacto[PRIME+1]; ull nbase[5]; ull kbase[5]; ull fmm(ull a, ull b){ ull ret = 0; if(b == 0){ ret = 1; } else if(b == 1){ ret = a; } else{ if(b % 2 == 0){ ull part = fmm(a, b/2); ret = (part*part)%PRIME; } else{ ull part = fmm(a, b/2); ret = ((part*part)%PRIME * a)%PRIME; } } return ret; } void preprocess(){ facto[0] = invfacto[0] = 1; for(int i = 1; i <= PRIME; i++){ ull ii = i; facto[i] = (facto[i-1]*ii)%PRIME; invfacto[i] = fmm(facto[i], PRIME-2); } } bool read(){ scanf("%llu %llu", &n, &k); return true; } int fact(ull k, ull * f){ ull ck = k; int i = 0; ull mp = PRIME; while(ck > 0){ f[i] = ck%mp; ck = (ck - f[i])/mp; i++; } return i; } ull binom(ull n, ull k){ ull ret = 0; if(k > n){ ret = 0; } else{ ret = (((facto[n]*invfacto[n-k])%PRIME)*invfacto[k])%PRIME; } return ret; } void process(){ int digits = 0; for(int i = 0; i < 5; i++){ nbase[i] = kbase[i] = 0; } digits = max(digits, fact(n-k+1, nbase)); digits = max(digits, fact(k, kbase)); ull result = 1; for(int i = 0; i < digits; i++){ result = (result*binom(nbase[i], kbase[i]))%PRIME; // printf("%llu %llu\n", nbase[i], kbase[i]); } printf("%llu\n", result); } int main(){ int cases; scanf("%d", &cases); preprocess(); while(cases-- && read()){ process(); } return 0; }