#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... |