#include <bits/stdc++.h>
using namespace std;
const int p = 1e9 + 7;
long long get_A(long long n, long long m) {
  long long ans = 1;
  for (long long i = n; i >= n - m + 1; i--) ans = (ans * i) % p;
  return ans % p;
}
int main() {
  long long t, n, x, pos;
  scanf("%lld%lld%lld", &n, &x, &pos);
  long long cntu = x - 1, cntv = n - x;
  long long l = 0, r = n;
  long long u = 0, v = 0;
  while (l < r) {
    long long mid = (l + r) / 2;
    if (mid > pos)
      r = mid, v++;
    else {
      l = mid + 1;
      if (mid != pos) u++;
    }
  }
  long long res = n - u - v - 1;
  long long ans = 1;
  ans = ans * get_A(cntu, u) % p;
  ans = ans * get_A(cntv, v) % p;
  ans = ans * get_A(res, res) % p;
  printf("%lld\n", ans);
}
