#include <bits/stdc++.h>
using namespace std;
const long long p = 1e9 + 7;
long long inv(long long a) {
  return a == 1 ? 1 : (long long)(p - p / a) * inv(p % a) % p;
}
long long C(long long n, long long m) {
  if (m < 0) return 0;
  if (n < m) return 0;
  if (m > n - m) m = n - m;
  long long up = 1, down = 1;
  for (long long i = 0; i < m; i++) {
    up = up * (n - i) % p;
    down = down * (i + 1) % p;
  }
  return up * inv(down) % p;
}
long long 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;
}
int main() {
  long long n, x, pos;
  cin >> n >> x >> pos;
  long long l = 0, r = n;
  long long less = 0, big = 0;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (mid > pos) {
      r = mid;
      big++;
    } else {
      l = mid + 1;
      if (mid < pos) {
        less++;
      }
    }
  }
  long long b = C(n - x, big) * A(big, big) % p;
  long long s = C(x - 1, less) * A(less, less) % p;
  cout << b * s % p * A(n - 1 - less - big, n - 1 - less - big) % p << endl;
  return 0;
}
