#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int HALF = 5e8 + 4;
int exp(int a, int b) {
return (b?1LL*exp(1LL*a*a%MOD,b/2)*(b&1?a:1)%MOD:1);
}
int solve(int h, int c) {
int fact[3005], invfact[3005];
fact[0] = invfact[0] = 1;
for(int i=1;i<3005;i++) {
fact[i] = 1LL * fact[i-1] * i % MOD;
invfact[i] = exp(fact[i], MOD-2);
}
int ans = MOD - 1;
for(int r1=0;r1<=h;r1++)
for(int r2=0;r2<=h-r1;r2++)
for(int c2=0;c2<=c;c2++) {
int c1 = (r1 + 2 * r2 - 2 * c2);
if(c1 < 0 || c1 + c2 > c || c1 < 2 * r2)
continue;
ans = (ans + 1LL * fact[h] * fact[c] % MOD * invfact[r2] % MOD * invfact[h-r1-r2] % MOD * invfact[c2] % MOD * invfact[c-c1-c2] % MOD * invfact[r1-2*c2] % MOD * exp(2, MOD-1-c2) % MOD * invfact[c1-2*r2] % MOD * exp(2, MOD-1-r2) % MOD * exp(4,r1-2*c2) % MOD * fact[r1-2*c2]) % MOD;
}
return ans;
}
int main() {
int h, c;
cin >> h >> c;
cout << solve(h, c);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |