#include #include using namespace std; using namespace atcoder; using mint = modint998244353; // dp[i][j] := 0 -> 2^iで、j回のy>=1の遷移をしている mint dp[510][510]; int main(){ int i,j,k,n,m; cin >> n >> m; dp[0][1] = 1; for(i=1;i<=n;i++){ // 0 -> 2^(i - 1) -> 2^i for(j=0;j<=m + 1;j++){ for(k=0;j + k<=m + 1;k++) dp[i][j + k] += dp[i - 1][j]*dp[i - 1][k]; } // 0 -> 0 -> 2^i for(j=0;j<=m + 1;j++) dp[i][j] += dp[i - 1][j]; } // 0 -> 2^nに最後が0以外でm + 1手で行く手数 = 0 -> 2^n - 1にm手で行く手数 cout << dp[n][m + 1].val() << "\n"; }