//~~~~~~~~~~~~~MJ®™~~~~~~~~~~~~~
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
#define rep1(n) for(ll i=0; i<(ll)(n); ++i)
#define rep2(i,n) for(ll i=0; i<(ll)(n); ++i)
#define rep3(i,a,b) for(ll i=(ll)(a); i<(ll)(b); ++i)
#define rep4(i,a,b,c) for(ll i=(ll)(a); i<(ll)(b); i+=(c))
#define cut4(a,b,c,d,e,...) e
#define rep(...) cut4(__VA_ARGS__,rep4,rep3,rep2,rep1)(__VA_ARGS__)
#define per1(n) for(ll i=((ll)n)-1; i>=0; --i)
#define per2(i,n) for(ll i=((ll)n)-1; i>=0; --i)
#define per3(i,a,b) for(ll i=((ll)a)-1; i>=(ll)(b); --i)
#define per4(i,a,b,c) for(ll i=((ll)a)-1; i>=(ll)(b); i-=(c))
#define per(...) cut4(__VA_ARGS__,per4,per3,per2,per1)(__VA_ARGS__)
#define ll long long
#define ln cout<<endl
#define int long long
#define vv vector<vi>
#define vp vector<pi>
#define append push_back
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(),(x).rend()
#define vi vector<int>
#define ret(x) {cout<<x;return;}
#define ui map<int,int>
#define pi pair<int,int>
#define ff first
#define ss second
using namespace std;
const int INF = 1e18, MOD = 1e9+7, N = 2e3+7;
int dp [N][N][3];
void solve()
{
int s;
int n, k, e, m, ans = 0;
cin >> n >> s >> e;
dp[1][1][(s==1) +(e==1)] = 1;
rep(i,0,n+1)
{
rep(j,0,i+1)
{
if ((i+1)==s or (i+1)==e)
{
rep(k,2)
{
dp[i+1][j][k+1] += dp[i][j][k];
dp[i+1][j+1][k+1] += dp[i][j][k];
dp[i+1][j][k+1] %= MOD;
dp[i+1][j+1][k+1] %= MOD;
}
}
else
{
rep(k,3)
{
dp [i+1][j+1][k] +=dp[i][j][k] * (j+1-k) ;
dp [i+1][j-1][k] +=dp[i][j][k] * (j-1) ;
dp [i+1][j+1][k] %= MOD;
dp [i+1][j-1][k] %= MOD;
// cout << "i = " << i << " j = " << j << " k = " << k << endl;
// cout << dp[i+1][j+1][k] << " " << dp[i+1][j-1][k] << " " << dp[i][j][k] << endl;
}
}
}
}
// rep(i,0,n+1)
// {
// rep(j,0,i+1)
// {
// rep(k,3)
// {
// cout << "i = " << i << " j = " << j << " k = " << k << endl;
// cout << dp[i][j][k] << endl;
// }
// }
// }
cout << dp[n][1][2];
// cout << ans;
// cout << a.size();
// for (auto i: a){cout << i << " ";}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL);
int ans=1;
freopen("kangaroo.txt", "r", stdin);
freopen("kangaroo.txt", "w", stdout);
//cout<<setprecision(1000);
// cin>>ans;
rep(ans){
// cout << "Case #" << i+1 << ": ";
solve();ln;}}
Compilation message (stderr)
kangaroo.cpp: In function 'int main()':
kangaroo.cpp:94:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
94 | freopen("kangaroo.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
kangaroo.cpp:95:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
95 | freopen("kangaroo.txt", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |