// Latihan bergaya OSN, Bab 17, soal 3 -- pembahasan. // // Memilih K kursi tak bersebelahan dari N kursi sama banyaknya dengan // memilih K kursi bebas dari N-K+1 kursi. #include #include using namespace std; const long long MOD = 1000000007LL; long long pangkat(long long alas, long long eksponen) { long long hasil = 1; alas %= MOD; while (eksponen > 0) { if (eksponen % 2 == 1) hasil = hasil * alas % MOD; alas = alas * alas % MOD; eksponen /= 2; } return hasil; } int main() { long long n, k; cin >> n >> k; long long atasN = n - k + 1; if (k > atasN || atasN < 0) { cout << "0\n"; return 0; } vector fakt(atasN + 1); fakt[0] = 1; for (long long i = 1; i <= atasN; i++) fakt[i] = fakt[i - 1] * i % MOD; long long bawah = fakt[k] * fakt[atasN - k] % MOD; cout << fakt[atasN] * pangkat(bawah, MOD - 2) % MOD << "\n"; return 0; }