Subject to the effect:
answer:
Card point: None
C++ Code:
#include <cstdio> #include <algorithm> #include <iostream> #define mul(a, b) (static_cast<long long> (a) * (b) % mod) const int maxn = 3010, mod = 1e9 + 7; inline void reduce(int &x) { x += x >> 31 & mod; } int n, m; int f[maxn][maxn]; int main() { std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0); std::cin >> n >> m; for (int i = 0; i <= n; ++i) { for (int j = 0; j <= m; ++j) { if (!i || !j) { f[i][j] = 1; continue; } f[i][j] = f[i][j - 1]; reduce(f[i][j] += mul(4, f[i - 1][j - 1]) * i % mod - mod); if (i > 1) reduce(f[i][j] += 1ll * i * (i - 1) / 2 % mod * f[i - 2][j - 1] % mod - mod); if (j > 1) reduce(f[i][j] += mul(i, j - 1) * f[i - 1][j - 2] % mod - mod); } } reduce(--f[n][m]); std::cout << f[n][m] << '\n'; return 0; }