#include<bits/stdc++.h>
#define int long long
#define fr first
#define sc second
#define lowbit(x) x&-x
using namespace std;
const int mod=998244353;
inline int ksm(int base,int t){
int res=1;
while(t>0){
if(t&1)res=res*base%mod;
base=base*base%mod,t>>=1;
}return res;
}
int fac[505],inv[505];
inline int C(int x,int y){return fac[x]*inv[y]%mod*inv[x-y]%mod;}
int n,m,ans;
int dp[505][505],f[505];
inline int read(){
register int x=0,t=0;
static char ch=getchar();
while(!isdigit(ch))t|=(ch=='-'),ch=getchar();
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return t?-x:x;
}
signed main(){
n=read(),m=read();
dp[0][0]=f[0]=fac[0]=1;
for(int i=1;i<=m;i++){
fac[i]=fac[i-1]*i%mod;
f[i]=f[i-1]*(4*i-2)/(i+1)%mod;
}
inv[m]=ksm(fac[m],mod-2);
for(int i=m-1;i>=0;i--){
inv[i]=inv[i+1]*(i+1)%mod;
}
for(int i=1;i<n;i++){
for(int j=0;j<=m;j++){
if((m-j)&1)continue;
for(int k=m-j;k>=0;k--){
(dp[i][k+j]+=dp[i-1][k]*C(m,j)%mod*f[(m-j)/2])%=mod;
}
}
}
for(int i=0;i<=m;i++){
if((m-i)&1)continue;
(ans+=dp[n-1][i]*C(m,i)%mod*f[(m-i)/2])%=mod;
}
cout<<ans;
return 0;
}
请问这样做为什么是错的