#include <bits/stdc++.h>
using namespace std;
long long power(long long x, int y, int p) {
  long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long modInverse(long long n) {
  return power(n, 1000000007 - 2, 1000000007);
}
long long binSearch(vector<int> arr, long long x, long long &lt,
                    long long &gt) {
  long long left = 0;
  long long right = arr.size();
  while (left < right) {
    long long mid = (left + right) / 2;
    if (arr[mid] <= x) {
      left = mid + 1;
      if (arr[mid] != x) lt++;
    } else {
      right = mid;
      gt++;
    }
  }
  return lt + gt;
}
long long fact(long long n);
long long f[1002];
long long nCr(long long n, long long r) {
  return (fact(n) * modInverse(fact(r)) % 1000000007 * modInverse(fact(n - r)) %
          1000000007) %
         1000000007;
}
long long nPr(long long n, long long r) {
  return (fact(n) % 1000000007 * modInverse(fact(n - r)) % 1000000007) %
         1000000007;
}
void facto() {
  f[1] = 1;
  f[0] = 1;
  for (int i = 2; i <= 1001; i++) {
    f[i] = (i % 1000000007 * f[i - 1] % 1000000007) % 1000000007;
  }
}
long long fact(long long n) { return f[n]; }
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long n, x, pos;
  facto();
  cin >> n >> x >> pos;
  long long lt = 0;
  long long gt = 0;
  long long x_lt = x - 1;
  long long x_gt = n - x;
  vector<int> arr(n, 0);
  for (int i = 0; i < n; i++) {
    arr[i] = i;
  }
  long long k = binSearch(arr, pos, lt, gt);
  long long a = nCr(x_lt, lt);
  long long b = nCr(x_gt, gt);
  long long c = fact(lt);
  long long d = fact(gt);
  long long ac = (a * c) % 1000000007;
  long long bd = (b * d) % 1000000007;
  long long ad = (ac * bd) % 1000000007;
  long long e = (fact(n - k - 1)) % 1000000007;
  cout << (e * ad) % 1000000007;
  return 0;
}
