#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int main() {
int h, w;
cin >> h >> w;
int dp[h+1][w+1][w+1];
memset(dp,0,sizeof(dp));
dp[0][w][0] = 1;
for(int i=0;i<h;i++) {
memcpy(dp[i+1],dp[i],sizeof(dp[i]));
for(int j=0;j<=w;j++)
for(int k=1;k<=w;k++)
dp[i+1][j][k-1] = (dp[i+1][j][k-1] + 1LL * k * dp[i][j][k]) % MOD;
for(int j=1;j<=w;j++)
for(int k=0;k<w;k++)
dp[i+1][j-1][k+1] = (dp[i+1][j-1][k+1] + 1LL * j * dp[i][j][k]) % MOD;
for(int j=2;j<=w;j++)
for(int k=0;k<=w;k++)
dp[i+1][j-2][k] = (dp[i+1][j-2][k] + 1LL * j * (j - 1) / 2 % MOD * dp[i][j][k]) % MOD;
}
int ans = MOD - 1;
for(int j=0;j<=w;j++)
for(int k=0,p4=1;k<=w;k++,p4=(4LL*p4)%MOD)
ans = (ans + 1LL * dp[h][j][k] * p4) % MOD;
cout << ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |