#include<bits/stdc++.h>
#define ll long long
#define F first
#define S second
#define pb push_back
#define mpr make_pair
const ll N=2e6 + 10 , mod=1e9 + 7, inf=1e18;
using namespace std;
ll n,m,k,q,c,x,y;
ll t[N];
bool vis[2500];
ll dp[250][250][250][3];
ll solve(ll ind,ll f,ll d,ll l,ll r){
if(l+r==0 ){
if((d==1 && ind<f) || (d==0 && ind>f))
return 1;
}
// if(dp[ind][l][r][d]!=-1)
// return dp[ind][l][r][d];
ll res=0;
if(d==2){
ll i=ind-1;
ll a=l,b=r;
while(i){
if(!vis[i] && i!=f){
a--;
vis[i]=1;
res+=solve(i,f,1,a,b);
vis[i]=0;
b++;
}
i--;
}
i=ind+1;
a=l;b=r;
while(i<=n){
if(!vis[i] && i!=f){
b--;
vis[i]=1;
res+=solve(i,f,0,a,b);
vis[i]=0;
a++;
}
i++;
}
}else if(d==0){
ll i=ind-1;
while(i){
if(!vis[i] && i!=f){
l--;
vis[i]=1;
res+=solve(i,f,1,l,r);
vis[i]=0;
r++;
}
i--;
}
}else{
ll i=ind+1;
while(i<=n){
if(!vis[i] && i!=f){
r--;
vis[i]=1;
res+=solve(i,f,0,l,r);
vis[i]=0;
l++;
}
i++;
}
}
return dp[ind][l][r][d]=res;
}
int main(){
ios_base::sync_with_stdio (0); cin.tie(0),cout.tie(0);
// freopen("dining.in","r",stdin);
// freopen("dining.out","w",stdout);
ll T=1;
//cin>>T;
while(T--){
ll a,b;
cin>>n>>a>>b;
//cout<<a<<" "<<b<<"\n";
memset(dp,-1,sizeof(dp));
vis[a]=1;
cout<<solve(a,b,2,a-1-(b<a),n-a-(b>a))%mod<<"\n";
}
return 0;
}
/*
3 1
1 3 10
1 2 4
2 3 4
*/
# | 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... |