#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX = 100000;
const int MOD = 1000000007;
ll fact[MAX + 1], ifact[MAX + 1];
ll bem(ll a, ll n, ll MOD) {
if (n == 0) return 1 % MOD;
ll half = bem(a, n / 2, MOD) % MOD;
ll res;
if (n % 2 == 0) {
res = (half * half) % MOD;
} else {
res = (a * half % MOD * half % MOD) % MOD;
}
return res;
}
void precompute() {
fact[0] = 1;
for (ll i = 1; i <= MAX; i++) {
fact[i] = (fact[i - 1] * i) % MOD;
}
ifact[MAX] = bem(fact[MAX], MOD - 2, MOD);
for (ll i = MAX - 1; i >= 0; i--) {
ifact[i] = (ifact[i + 1] * (i + 1)) % MOD;
}
}
ll ncr(ll n, ll r) {
if (r < 0 || n < r) return 0;
return (((fact[n] * ifact[r]) % MOD) * ifact[n - r]) % MOD;
}
int main() {
precompute();
cout << ncr(4, 2) << endl; // Output: 6
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IE1BWCA9IDEwMDAwMDsKY29uc3QgaW50IE1PRCA9IDEwMDAwMDAwMDc7CgpsbCBmYWN0W01BWCArIDFdLCBpZmFjdFtNQVggKyAxXTsKCmxsIGJlbShsbCBhLCBsbCBuLCBsbCBNT0QpIHsKICAgIGlmIChuID09IDApIHJldHVybiAxICUgTU9EOwogICAgbGwgaGFsZiA9IGJlbShhLCBuIC8gMiwgTU9EKSAlIE1PRDsKICAgIGxsIHJlczsKICAgIGlmIChuICUgMiA9PSAwKSB7CiAgICAgICAgcmVzID0gKGhhbGYgKiBoYWxmKSAlIE1PRDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmVzID0gKGEgKiBoYWxmICUgTU9EICogaGFsZiAlIE1PRCkgJSBNT0Q7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9Cgp2b2lkIHByZWNvbXB1dGUoKSB7CiAgICBmYWN0WzBdID0gMTsKICAgIGZvciAobGwgaSA9IDE7IGkgPD0gTUFYOyBpKyspIHsKICAgICAgICBmYWN0W2ldID0gKGZhY3RbaSAtIDFdICogaSkgJSBNT0Q7CiAgICB9CiAgICBpZmFjdFtNQVhdID0gYmVtKGZhY3RbTUFYXSwgTU9EIC0gMiwgTU9EKTsKICAgIGZvciAobGwgaSA9IE1BWCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaWZhY3RbaV0gPSAoaWZhY3RbaSArIDFdICogKGkgKyAxKSkgJSBNT0Q7CiAgICB9Cn0KCmxsIG5jcihsbCBuLCBsbCByKSB7CiAgICBpZiAociA8IDAgfHwgbiA8IHIpIHJldHVybiAwOwogICAgcmV0dXJuICgoKGZhY3Rbbl0gKiBpZmFjdFtyXSkgJSBNT0QpICogaWZhY3RbbiAtIHJdKSAlIE1PRDsKfQoKaW50IG1haW4oKSB7CiAgICBwcmVjb21wdXRlKCk7CiAgICBjb3V0IDw8IG5jcig0LCAyKSA8PCBlbmRsOyAvLyBPdXRwdXQ6IDYKICAgIHJldHVybiAwOwp9Cg==