#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long inv(long long i) {
  if (i == 1) return 1;
  return (mod - ((mod / i) * inv(mod % i)) % mod) % mod;
}
long long mod_mul(long long a, long long b, long long m) {
  a = a % m;
  b = b % m;
  return (((a * b) % m) + m) % m;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long ceil_div(long long a, long long b) {
  return a % b == 0 ? a / b : a / b + 1;
}
long long pwr(long long a, long long b) {
  a %= mod;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t, n, i, j, ans, temp, sum, x, pos;
  string sans;
  t = 1;
  while (t--) {
    sans = "NO";
    ans = temp = sum = 0;
    cin >> n >> x >> pos;
    vector<vector<long long> > C(1001, vector<long long>(1001, 0));
    for (i = 1; i <= 1000; i++) C[0][i] = 0;
    for (i = 0; i <= 1000; i++) C[i][0] = 1;
    for (i = 1; i <= 1000; i++) {
      for (j = 1; j <= i; j++) {
        C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
      }
    }
    vector<long long> fact(1001, 0);
    fact[0] = 1;
    for (i = 1; i <= 1000; i++) {
      fact[i] = (fact[i - 1] * i) % mod;
    }
    long long greater = 0;
    long long smaller = 0;
    long long l, r, mid;
    l = 0;
    r = n;
    while (r > l) {
      mid = (l + r) / 2;
      if (pos >= mid) {
        if (pos != mid) smaller++;
        l = mid + 1;
      } else {
        greater++;
        r = mid;
      }
    }
    ans = (C[n - x][greater] % mod * fact[greater] % mod) % mod;
    ans = (ans * (C[x - 1][smaller] % mod * fact[smaller] % mod) % mod) % mod;
    ans = (ans * (fact[n - smaller - greater - 1])) % mod;
    cout << ans << "\n";
  }
  return 0;
}
