#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
long long int d(long long int r, long long int k) {
  static long long int i, d;
  if (k > r) return 0;
  d = 1;
  for (i = r - k + 1; i <= r; i++) {
    d = (d * i) % 1000000007;
  }
  return d;
}
int main() {
  static long long int n, x, pos, minori, maggiori, l, r, m, s;
  minori = maggiori = 0;
  cin >> n >> x >> pos;
  l = 0;
  r = n;
  while (l < r) {
    m = (l + r) >> 1;
    if (m < pos) {
      minori++;
      l = m + 1;
    } else if (m == pos) {
      l = m + 1;
    } else {
      maggiori++;
      r = m;
    }
  }
  s = (d(x - 1, minori) * d(n - x, maggiori)) % 1000000007;
  s = (s * d(n - maggiori - minori - 1, n - maggiori - minori - 1)) %
      1000000007;
  cout << s << "\n";
  return 0;
}
