#include <bits/stdc++.h>
using namespace std;
long long fact[1001];
long long inv[1001];
long long mypower(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b % 2) ans = ans * a % 1000000007;
    b = b / 2;
    a = a * a % 1000000007;
  }
  return ans;
}
void pre() {
  long long i;
  fact[0] = 1;
  for (i = 1; i < 1001; i++) fact[i] = (i * fact[i - 1]) % 1000000007;
  inv[1000] = mypower(fact[1000], 1000000007 - 2);
  for (i = 999; i >= 0; i--) inv[i] = (inv[i + 1] * (i + 1)) % 1000000007;
}
long long nCr(long long n, long long r) {
  if (n < 0 || r < 0 || n < r) return 0;
  long long val = fact[n] * inv[n - r] % 1000000007;
  return val;
}
signed main() {
  pre();
  long long n, x, pos;
  cin >> n >> x >> pos;
  long long left = 0, right = n;
  vector<long long> sm, gr;
  while (left < right) {
    long long mid = (left + right) / 2;
    if (mid <= pos) {
      if (mid != pos) sm.push_back(mid);
      left = mid + 1;
    } else
      gr.push_back(mid), right = mid;
  }
  assert(left > 0);
  long long ans = nCr(x - 1, sm.size());
  ans = ans * nCr(n - x, gr.size()) % 1000000007;
  long long rem = (n - 1 - sm.size() - gr.size());
  ans = ans * fact[rem] % 1000000007;
  cout << ans;
}
