func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MAXN = 1e6 + 10;   const long long INF = 8e18;   const long long MOD = 1e9 + 7;   inline long long poww(long long a, long long b) {     a %= MOD;     long long ans = 1;     while (b > 0) {       if (b & 1) ans = ans * a % MOD;       b >>= 1;       a = a * a % MOD;     }     return ans;   }   long long fact[MAXN], inv[MAXN], n, k, ans, F[MAXN];   inline long long C(int k, int n) {     return fact[n] * inv[k] % MOD * inv[n - k] % MOD;   }   inline void mkey(long long& a) {     if (a >= MOD) a -= MOD;     if (a < 0) a += MOD;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> k;     fact[0] = inv[0] = 1;     for (int i = 1; i < MAXN; i++)       fact[i] = fact[i - 1] * i % MOD, inv[i] = poww(fact[i], MOD - 2);     F[0] = 1;     for (int i = 1; i <= n; i++) {       F[i] = i * F[i - 1] % MOD;       if (i > k) mkey(F[i] -= C(k, i - 1) * fact[k] % MOD * F[i - k - 1] % MOD);     }     for (int i = 1; i <= n; i++)       mkey(ans += C(i - 1, n - 1) * F[i - 1] % MOD * fact[n - i] % MOD);     cout << (fact[n] - ans + MOD) % MOD <<   n ;     return 0;   }   