#include <bits/stdc++.h>
using namespace std;
const int MaxN = 1e4 + 5;
int mark[MaxN];
int MOD = 1e9 + 7;
long long fact[MaxN];
void factorial() {
  fact[0] = 1;
  fact[1] = 1;
  for (int i = 2; i < MaxN; i++) fact[i] = (fact[i - 1] * i) % MOD;
}
void BinarySearch(int xpos, int n) {
  int left = 0;
  int right = n;
  while (left < right) {
    int mid = (left + right) / 2;
    mark[mid] = 1;
    if (mid <= xpos) {
      left = mid + 1;
    } else {
      right = mid;
    }
  }
}
void solve() {
  int n, num, pos;
  cin >> n >> num >> pos;
  BinarySearch(pos, n);
  int big = 0, small = 0;
  for (int i = pos + 1; i < n; i++)
    if (mark[i]) big++;
  for (int i = 0; i < pos; i++)
    if (mark[i]) small++;
  int unmark = n - (big + small) - 1;
  int nbig = n - num;
  int nsmall = num - 1;
  long long res1 = 0, res2 = 0;
  if (big <= nbig) {
    res1 = 1;
    for (long long i = nbig; i > nbig - big; i--) res1 = (res1 * i) % MOD;
  }
  if (small <= nsmall) {
    res2 = 1;
    for (long long i = nsmall; i > nsmall - small; i--) res2 = (res2 * i) % MOD;
  }
  long long res = (res1 * res2) % MOD;
  res = (res * fact[unmark]) % MOD;
  cout << res << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  factorial();
  solve();
  return 0;
}
