#include <bits/stdc++.h>
using namespace std;
const long long P = 1e9 + 7;
const int MAX_N = 1010;
int Flag[MAX_N];
long long N, Pos, X, PrevCnt, NextCnt;
void GetFlag() {
  int l = 0, r = N;
  while (l < r) {
    int mid = (l + r) / 2;
    if (mid <= Pos) {
      Flag[mid] = -1;
      l = mid + 1;
    } else {
      Flag[mid] = 1;
      r = mid;
    }
  }
}
void GetCnt() {
  for (int i = 0; i <= N; i++) {
    if (i == Pos) continue;
    PrevCnt += (Flag[i] == -1);
    NextCnt += (Flag[i] == 1);
  }
}
long long Exgcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  long long d = Exgcd(b, a % b, x, y);
  long long tx = x;
  x = y;
  y = tx - (a / b) * y;
  return d;
}
long long Inv(long long a) {
  long long x, y;
  Exgcd(a, P, x, y);
  return (x % P + P) % P;
}
long long Fact(long long n) {
  long long ans = 1;
  for (long long i = 1; i <= n; i++) ans = ans * i % P;
  return ans;
}
long long Perm(long long n, long long r) {
  if (n < r) return 0;
  return Fact(n) * Inv(Fact(n - r)) % P;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> N >> X >> Pos;
  GetFlag();
  GetCnt();
  cout << (Perm(X - 1, PrevCnt) * Perm(N - X, NextCnt) % P *
           Fact(N - PrevCnt - NextCnt - 1) % P) %
              P
       << endl;
  return 0;
}
