func_code_string: #include <bits/stdc++.h>   const unsigned long long mod = 1e9 + 7;   using namespace std;   const int N = 1e3 + 5;   const double esp = 1e-5;   int n, x, pos, lsum = -1, rsum;   unsigned long long f[N], a[N];   unsigned long long qpow(unsigned long long a, unsigned long long b) {     unsigned long long ans = 1, base = a;     while (b) {       if (b & 1) ans = (ans * base % mod + mod) % mod;       base = (base * base % mod + mod) % mod;       b >>= 1;     }     return ans;   }   void init() {     f[0] = 1;     for (int i = 1; i <= 1000; i++) f[i] = f[i - 1] * i % mod, a[i - 1] = i - 1;   }   unsigned long long cal(unsigned long long n, unsigned long long m) {     return 1ll *            (f[n] * qpow(f[m], mod - 2) % mod * qpow(f[n - m], mod - 2) % mod);   }   void find() {     int l = 0;     int r = n;     while (l < r) {       int mid = (l + r) >> 1;       if (mid <= pos) {         l = mid + 1;         lsum++;       } else {         r = mid;         rsum++;       }     }   }   int main() {     init();     scanf( %d%d%d , &n, &x, &pos);     find();     unsigned long long ans = f[rsum] * cal(n - x, rsum) % mod * f[lsum] % mod *                              cal(x - 1, lsum) % mod * f[n - lsum - rsum - 1] %                              mod;     printf( %lld , ans % mod);     return 0;   }   