#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vpii = vector<pii>;
using vpll = vector<pll>;
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const auto &x : v) os << x << " ";
  return os << endl;
}
ll ceil_div(ll a, ll b) { return (a + b - 1) / b; }
constexpr ll MOD = 1e9 + 7;
ll fact(int n) {
  ll ans = 1;
  for (int i = 1; i <= n; i++) ans = (ans * i) % MOD;
  return ans;
}
void solve() {
  int n, x, pos;
  cin >> n >> x >> pos;
  int lo = 0, hi = n;
  int left = 0, right = 0;
  while (lo < hi) {
    int mid = (lo + hi) / 2;
    if (pos < mid) {
      hi = mid;
      right++;
    } else {
      lo = mid + 1;
      left += (pos > mid);
    }
  }
  ll ans = 1;
  for (int i = 1; i <= left; ++i) ans = (ans * (x - i)) % MOD;
  for (int i = 1; i <= right; ++i) ans = (ans * (n - x - i + 1)) % MOD;
  int r = n - left - right - 1;
  ans = (ans * fact(r)) % MOD;
  cout << ans << endl;
}
int main(int argc, char const *argv[]) {
  solve();
  return 0;
}
