#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 1000000007
const int N = 2e3 + 5;
int dp[N][N][3];
void solve(){
int n, s, f;
cin >> n >> s >> f;
dp[1][1][(s == 1) + (f == 1)] = 1;
for (int i = 1 ; i<n ; i++)
for (int j = 1 ; j<= i ; j++)
if (i+1 == s || i+1 == f) {
for (int k = 0 ; k < 2 ; k++) {
dp[i + 1][j][k + 1] += dp[i][j][k], dp[i + 1][j][k + 1] %= mod;
dp[i + 1][j + 1][k + 1] += dp[i][j][k], dp[i + 1][j + 1][k + 1] %= mod;
}
}
else {
for (int k=0;k<3;k++) {
dp[i+1][j+1][k] += dp[i][j][k]*(j+1-k), dp[i + 1][j + 1][k] %= mod;
dp[i+1][j-1][k] += dp[i][j][k]*(j-1), dp[i + 1][j - 1][k] %= mod;
}
}
cout << dp[n][1][2] << '\n';
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1 ;//cin >> t;
while(t -- )solve();
}
# | 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... |