#include <bits/stdc++.h>
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
inline int read() {
  int X = 0;
  bool flag = 1;
  char ch = getchar();
  while (ch<'0' | ch> '9') {
    if (ch == '-') flag = 0;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    X = (X << 1) + (X << 3) + ch - '0';
    ch = getchar();
  }
  if (flag) return X;
  return ~(X - 1);
}
int n, x, pos;
long long fac[N];
long long f[N], invf[N];
long long fpow(long long a, long long k) {
  long long res = 1;
  while (k) {
    if (k & 1) res = (res * a) % mod;
    k >>= 1;
    a = a * a % mod;
  }
  return res;
}
void init(int n) {
  f[0] = 1;
  for (int i = 1; i <= n; ++i) {
    f[i] = f[i - 1] * i % mod;
  }
  invf[n] = fpow(f[n], mod - 2);
  for (int i = n - 1; i >= 0; --i) {
    invf[i] = invf[i + 1] * (i + 1) % mod;
  }
}
long long C(int n, int k) {
  if (k < 0 || k > n) return 0;
  return f[n] * invf[k] % mod * invf[n - k] % mod;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> x >> pos;
  init(n);
  int l = 0, r = n;
  int L = 0, R = 0;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (mid <= pos) {
      if (mid != pos) L++;
      l = mid + 1;
    } else
      R++, r = mid;
  }
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) {
    fac[i] = fac[i - 1] % mod * i % mod;
  }
  cout << C(x - 1, L) % mod * fac[L] % mod * C(n - x, R) % mod * fac[R] % mod *
              fac[n - L - R - 1] % mod
       << endl;
  return 0;
}
