func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1000000009, N = 4005;   int cal[N][N], fac[N];   inline int add(int a, int b) {     if (a < 0) a += mod;     if (b < 0) b += mod;     int ret = a + b;     if (ret >= mod)       return ret %= mod;     else       return ret;   }   inline int mul(int a, int b) {     if (a < 0) a += mod;     if (b < 0) b += mod;     long long ret = (long long)a * b;     if (ret >= mod)       return ret % mod;     else       return ret;   }   int main() {     memset(cal, 0, sizeof(cal));     cal[0][0] = 1;     fac[0] = 1;     for (int i = 1; i < N; i++) {       fac[i] = mul(fac[i - 1], i);       cal[i][0] = cal[i][i] = 1;       for (int j = 1; j < i; j++) {         cal[i][j] = add(cal[i - 1][j], cal[i - 1][j - 1]);       }     }     int n, a, b, ans = 0;     scanf( %d%d%d , &n, &a, &b);     for (int i = 1; i < n - 1; i++) {       for (int j = i + 2; j <= n; j++) {         int cntb = j - i - 1, cnta = n - cntb;         if (cntb > b) break;         if (cnta > a) continue;         ans = add(ans, mul(mul(cal[a - 1][cnta - 1], fac[a]),                            mul(cal[b - 1][cntb - 1], fac[b])));       }     }     printf( %d n , ans);     return 0;   }   