#include <bits/stdc++.h>
#include <cstring>
#include <system_error>
using namespace std;
typedef long long ll;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
template < int MOD = 1000000007, typename T = ll > struct ModInt {
T val;
ModInt(T V = 0) : val(V) { val %= MOD; }
ModInt& operator += (const ModInt& rhs) {
if ((val += rhs.val) >= MOD) val -= MOD;
return *this;
}
ModInt& operator += (const T rhs) {
if ((val += rhs) >= MOD) val -= MOD;
return *this;
}
ModInt& operator -= (const ModInt& rhs) {
if ((val += MOD - rhs.val) >= MOD) val -= MOD;
return *this;
}
ModInt& operator -= (const T rhs) {
if ((val += MOD - rhs) >= MOD) val -= MOD;
return *this;
}
ModInt& operator *= (const ModInt& rhs) { val = (1ll * val * rhs.val) % MOD; return *this; }
ModInt& operator *= (const T rhs) { val = (1ll * val * rhs) % MOD; return *this; }
ModInt& operator /= (const ModInt& rhs) { return *this *= rhs.inverse(); }
ModInt& operator /= (const T rhs) { return *this *= ModInt(rhs).inverse(); }
ModInt& operator %= (const ModInt& rhs) { val %= rhs.val; return *this; }
ModInt& operator %= (const T rhs) { val %= rhs; return *this; }
ModInt& operator ++() { return *this += 1; }
ModInt& operator --() { return *this -= 1; }
ModInt operator + (const ModInt& rhs) const { ModInt res(*this); return res += rhs; }
ModInt operator + (const T rhs) const { ModInt res(*this); return res += rhs; }
ModInt operator % (const ModInt& rhs) const { ModInt res(*this); return res %= rhs; }
ModInt operator % (const T rhs) const { ModInt res(*this); return res %= rhs; }
ModInt operator - (const ModInt& rhs) const { ModInt res(*this); return res -= rhs; }
ModInt operator - (const T rhs) const { ModInt res(*this); return res -= rhs; }
ModInt operator * (const ModInt& rhs) const { ModInt res(*this); return res *= rhs; }
ModInt operator * (const T rhs) const { ModInt res(*this); return res *= rhs; }
ModInt operator / (const ModInt& rhs) const { ModInt res(*this); return res /= rhs; }
ModInt operator / (const T rhs) const { ModInt res(*this); return res /= rhs; }
ModInt& operator = (const ModInt& rhs) { val = rhs.val; return *this; }
ModInt& operator = (const T rhs) { val = rhs; return *this; }
T operator ~ () { return ~val; }
bool operator ! () { return !val; }
bool operator == (const ModInt& rhs) const { return val == rhs.val; }
bool operator == (const T rhs) const { return val == rhs; }
bool operator != (const ModInt& rhs) const { return val != rhs.val; }
bool operator != (const T rhs) const { return val != rhs; }
bool operator < (const ModInt& rhs) const { return val < rhs.val; }
bool operator < (const T rhs) const { return val < rhs; }
bool operator <= (const ModInt& rhs) const { return val <= rhs.val; }
bool operator <= (const T rhs) const { return val <= rhs; }
bool operator > (const ModInt& rhs) const { return val > rhs.val; }
bool operator > (const T rhs) const { return val > rhs; }
bool operator >= (const ModInt& rhs) const { return val >= rhs.val; }
bool operator >= (const T rhs) const { return val >= rhs; }
T operator () () const { return val; }
ModInt inverse() const { return power(MOD - 2); }
ModInt power(T n) const {
ModInt a = *this, res = 1;
while (n > 0) {
if (n & 1) res *= a;
a *= a, n >>= 1;
}
return res;
}
ModInt power(ModInt n) const {
ModInt a = *this, res = 1;
T e = n();
while (e > 0) {
if (e & 1) res *= a;
a *= a, e >>= 1;
}
return res;
}
friend ModInt operator ^ (ModInt rhs, T n) { return rhs.power(n); }
friend ModInt operator ^ (ModInt rhs, ModInt n) { return rhs.power(n); }
friend istream& operator>>(std::istream& is, ModInt& x) noexcept { return is >> x.val; }
friend ostream& operator<<(std::ostream& os, const ModInt& x) noexcept { return os << x.val; }
};
using Mint = ModInt<>;
Mint dp[2005][2005];
int n,s,e;
Mint go(int i,int j ) {
if(j < 0)
return 0;
if(i == n + 1)
return j == 1;
auto &ret = dp[i][j];
if(~ret)
return ret;
ret = 0;
if(i == s or i == e) {
ret += go(i + 1,j + 1);
ret += go(i + 1,j);
}
else {
int ways = j + 1 - (i > s) - (i > e);
if(ways > 0)
ret += go(i + 1,j + 1) * ways;
if(j > 1)
ret += go(i + 1,j - 1) * (j - 1);
}
return ret;
}
// Pen and paper dipshit.
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> s >> e;
memset(dp, -1, sizeof dp);
cout << go(1,0) << '\n';
}