#include <bits/stdc++.h>
using namespace std;
void input() { return; }
template <typename T1, typename... T2>
void input(T1 &x, T2 &...args) {
  ((cin >> x), input(args...));
}
void wrt() {
  cout << "\n";
  return;
}
template <typename T1, typename... T2>
void wrt(T1 x, T2... args) {
  ((cout << x << ' '), wrt(args...));
}
template <typename T>
void inputlst(T &lst, int x, int y) {
  for (int i = x; i < y; i++) cin >> lst[i];
}
template <typename T>
void printlst(T &lst, int x, int y) {
  for (int i = x; i < y; i++) cout << lst[i] << " ";
  cout << "\n";
}
const long long N = 1001, mod = 1e9 + 7;
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, x, pos, ans = 1;
  input(n, x, pos);
  long long i = 0, j = n, cntl = x - 1, cntr = n - x, total = n - 1;
  while (i < j) {
    int mid = (i + j) / 2;
    if (mid == pos)
      i = mid + 1;
    else if (mid > pos) {
      ans = (ans * cntr) % mod;
      cntr--, total--;
      j = mid;
    } else {
      ans = (ans * cntl) % mod;
      cntl--, total--;
      i = mid + 1;
    }
  }
  for (int i = 1; i < total + 1; ++i) ans = (ans * i) % mod;
  wrt(ans);
  return 0;
}
