#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
int r, c;
int f[3005][3005];
int dp(int i, int j)
{
	if (i <= 0 || j <= 0) return 1;
	if (f[i][j] != -1) return f[i][j];
	f[i][j] = 0;
	f[i][j] = (f[i][j] + (dp(i - 1, j - 2) * (j * (j - 1)) / 2) % mod + (dp(i - 2, j - 1) * (i - 1) * j) % mod + (dp(i - 1, j) % mod) + (dp(i - 1, j - 1) * j * 4) % mod) % mod;
	return f[i][j];
}
signed main()
{
	cin >> r >> c;
	memset(f, -1, sizeof(f));
	cout << dp(r, c) - 1;
	return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |