#include <bits/stdc++.h>
using namespace std;
bool sortbysecc(const pair<long long, long long> &a,
                const pair<long long, long long> &b) {
  return a.second > b.second;
}
const long long MOD = 1e9 + 7;
long long C[1005][1005];
long long comb(long long n, long long r) {
  if (r > n) return 0;
  if (r == 0) return C[n][r] = 1;
  if (n == r) return C[n][r] = 1;
  if (r == 1) return C[n][r] = n;
  if (C[n][r] != -1) return C[n][r] % MOD;
  C[n][r] = (comb(n - 1, r) + comb(n - 1, r - 1)) % MOD;
  return C[n][r];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t, n, x, pos, m, i, j;
  cin >> n >> x >> pos;
  memset(C, -1, sizeof C);
  long long fact[1005];
  fact[0] = 1;
  for (i = 1; i < 1005; i++) {
    fact[i] = (fact[i - 1] * i) % MOD;
  }
  long long l = 0, r = n, countLess = 0, countBig = 0, ans;
  while (l < r) {
    m = (l + r) / 2;
    if (m <= pos) {
      countLess++;
      l = m + 1;
    } else {
      countBig++;
      r = m;
    }
  }
  ans = (comb(x - 1, countLess - 1) * fact[countLess - 1]) % MOD;
  ans = (((ans * comb(n - x, countBig)) % MOD) * fact[countBig]) % MOD;
  ans = (ans * fact[n - countBig - countLess]) % MOD;
  cout << ans << "\n";
}
