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