func_code_string: // #pragma GCC optimize( Ofast,unroll-loops )   // #pragma GCC target( avx,avx2,fma )      #include <bits/stdc++.h>   using namespace std;      #define ll long long   #define ull unsigned long long   #define dd double   #define ld long double   #define sl(n) scanf( %lld , &n)   #define si(n) scanf( %d , &n)   #define sd(n) scanf( %lf , &n)   #define pll pair <ll, ll>   #define pii pair <int, int>   #define mp make_pair   #define pb push_back   #define all(v) v.begin(), v.end()   #define inf (1LL << 61)   #define loop(i, start, stop, inc) for(ll i = start; i <= stop; i += inc)   #define for1(i, stop) for(ll i = 1; i <= stop; ++i)   #define for0(i, stop) for(ll i = 0; i < stop; ++i)   #define rep1(i, start) for(ll i = start; i >= 1; --i)   #define rep0(i, start) for(ll i = (start-1); i >= 0; --i)   #define ms(n, i) memset(n, i, sizeof(n))   #define casep(n) printf( Case %lld: , ++n)   #define pn printf(  n )   #define pf printf   #define EL   n    #define fastio std::ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);      // === Debug macro starts here ===   #ifndef ONLINE_JUDGE   #define DEBUG   #define SYS_COL system( COLOR )   #endif      int recur_depth = 0;   #ifdef DEBUG   #define dbg(x) {++recur_depth; auto x_=x; --recur_depth; SYS_COL;                    cerr<<string(recur_depth,   t )<<  [91m <<__func__<< :                     <<__LINE__<<  t <<#x<<  =  <<x_<<  [39m <<endl;}      template<typename Ostream, typename Cont>   typename enable_if<is_same<Ostream,ostream>::value,               Ostream&>::type operator<<(Ostream& os,  const Cont& v) {    os<< [ ;    for(auto& x:v){os<<x<< ,  ;}    return os<< ] ;   }   template<typename Ostream, typename ...Ts>   Ostream& operator<<(Ostream& os,  const pair<Ts...>& p){    return os<< { <<p.first<< ,  <<p.second<< } ;   }   #else   #define dbg(x)   #endif   // === Debug macro ends here ===      #define ff first   #define ss second      const ll sz = 1e5 + 10, mod = 1e9 + 7;   ll fact[sz], inv[sz];      ll fastPow(ll x, ll n, ll MOD)   {       ll ret = 1;       while (n)       {           if (n & 1) ret = (ret * x) % MOD;           x = (x * x) % MOD;           n >>= 1;       }       return ret % MOD;   }      inline ll ncr(ll n, ll r)   {       if(n < r) return 0;       ll den = (inv[r] * inv[n-r]) % mod;       return (fact[n] * den) % mod;   }      int main()   {       fact[0] = 1;       for1(i, sz-1) fact[i] = (fact[i-1] * i) % mod;          inv[sz-1] = fastPow(fact[sz-1], mod-2, mod);       rep0(i, sz-1) inv[i] = (inv[i+1] * (i+1)) % mod;          ll t;       cin >> t;          while(t--) {           ll n, k;           sl(n), sl(k);              ll ans = 0;              for1(p, n) {               ll posCell = n - (k-1)*(p-1);               if(posCell <= 0) break;                  ll prob = (fact[p] * inv[n]) % mod;               prob = (prob * fact[n-p]) % mod;                  ans += (ncr(posCell, p) * prob) % mod;               if(ans >= mod) ans -= mod;           }           pf( %lld n , (ans+1)%mod);       }          return 0;   }      