为什么我被fst了啊/fad 太害怕了
//QwQcOrZ yyds!!!
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x = 0; char ch = getchar(); bool positive = 1;
for (; !isdigit(ch); ch = getchar()) if (ch == '-') positive = 0;
for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
return positive ? x : -x;
}
inline void write(int a){
if(a>=10)write(a/10);
putchar('0'+a%10);
}
inline void writesp(int a){
if(a>=10)write(a/10);
putchar('0'+a%10);
printf(" ");
}
inline void writeln(int a){
if(a<0){
a=-a; putchar('-');
}
write(a); puts("");
}
#define N 110000
#define mod 1000000007
using namespace std;
int n, k, a[N], b[N], jc[N], l, Ans;
int qpow(int x, int y) {
if(x == 0) return 0;
int res = 1;
while(y) {
if(y & 1) res = 1ll * res * x % mod;
x = 1ll * x * x % mod, y >>= 1;
}
return res;
}
int ny(int x) {
return qpow(x, mod-2);
}
int C(int x, int y) {
if (y==0) return 1;
return 1ll * jc[x] * ny(jc[y]) % mod * ny(jc[x - y]) % mod;
}
int f[N],x,pos,r,mid,cnt1,cnt2;
signed main()
{
jc[0] = 1;
for(int i = 1; i <= 10000; i++) jc[i] = 1ll * jc[i-1] * i % mod;
f[0]=1;
for (int i=1;i<=1000;i++) f[i]=f[i-1]*i%mod;
n=read(),x=read(),pos=read();
l=0;r=n;
while (l<r)
{
mid=(l+r)/2;
if (pos<mid)
{
// a[mid]=1;
cnt1++;
r=mid;
} else
{
// a[mid]=-1;
if (pos!=mid) cnt2++;
l=mid+1;
}
//cout<<pos<<" "<<mid<<endl;
}
//cout<<cnt1<<" "<<cnt2<<endl;
writeln(C(n-x,cnt1)*f[cnt1]%mod*C(x-1,cnt2)*f[cnt2]%mod*f[n-cnt1-cnt2-1]%mod);
}