#include <bits/stdc++.h>
using namespace std;
long long memo[3005][3005];
const long long mod=1000000007;
long long dp(int x, int y){
if(memo[x][y]!=-1) return memo[x][y];
if(x==0||y==0) return 1;
long long ret=dp(x-1,y);
ret+=dp(x-1,y-1)*y*4ll%mod;
ret%=mod;
ret+=dp(x-2,y-1)*y%mod*(x-1)%mod;
ret%=mod;
ret+=y*(y-1)/2%mod*dp(x-1,y-2)%mod;
return memo[x][y]=ret;
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
memset(memo,-1,sizeof(memo));
int a,b;
cin >> a >> b;
long long ans=dp(a,b)-1;
if(ans<0) ans+=mod;
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |