#include <bits/stdc++.h>
using namespace std;
void shuru_krte_hai_bina_kisi_bakchodi_ke() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}
const long long mod = 1e9 + 7;
const long long s = 1e6 + 1;
vector<long long> v[201];
long long val[201];
long long power(long long x, long long y, long long p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long modInverse(long long n, long long p) { return power(n, p - 2, p); }
long long fact[1001] = {0};
long long nCrModPFermat(long long n, long long r, long long p) {
  if (n < r) {
    return 0;
  }
  if (r == 0) return 1;
  return (fact[n] * modInverse(fact[r], p) % p * modInverse(fact[n - r], p) %
          p) %
         p;
}
int32_t main() {
  shuru_krte_hai_bina_kisi_bakchodi_ke();
  fact[0] = 1;
  fact[1] = 1;
  for (long long i = 2; i < 1001; i++) {
    fact[i] = (i * fact[i - 1]) % mod;
  }
  long long n, x, pos;
  cin >> n >> x >> pos;
  long long l = 0;
  long long r = n;
  long long g = 0, s = 0;
  while (l < r) {
    long long mid = l + (r - l) / 2;
    if (mid <= pos) {
      l = mid + 1;
      if (mid != pos) {
        s++;
      }
    } else {
      r = mid;
      g++;
    }
  }
  long long ans =
      (nCrModPFermat(n - x, g, mod) * nCrModPFermat(x - 1, s, mod)) % mod;
  ans = (ans * fact[n - 1 - g - s]) % mod;
  ans = (ans * fact[g]) % mod;
  ans = (ans * fact[s]) % mod;
  cout << ans;
  return 0;
}
