#include<bits/stdc++.h> #define MOD 998244353 #define MAXN 1005 usingnamespace std; inlineintread(){ int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9'){ if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^'0'); ch=getchar(); } return x*f; } int n,a,b,c,d; int C[MAXN][MAXN],sum[MAXN][MAXN]; inlinevoidInit(){ for (registerint i=0;i<=n;++i){ C[i][0]=sum[i][0]=1; for (registerint j=1;j<=i;++j){ C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD; } for (registerint j=1;j<=n;++j){ sum[i][j]=(sum[i][j-1]+C[i][j])%MOD; } } } inlinelonglongQuerySum(int i,int l,int r){ if (l>r) return0; if (l<=0) return sum[i][r]; return (sum[i][r]-sum[i][l-1]+MOD)%MOD; } intmain(){ n=read(); a=min(n,read());b=min(n,read());c=min(n,read());d=min(n,read());//超过n和n取min,因为任何一种都不可能用超过n次 Init(); int ans=0; for (registerint cxk=0;cxk<=n/4ll;++cxk){//cxk是讨论cxk的组数 int ret=0; int left=n-cxk*4; for (registerint i=0;i<=left;++i){//从剩下的人里面选出i个人讨论唱跳,剩下讨论rap篮球 int j=left-i;//讨论rap和篮球 ret=(ret+(longlong)C[left][i]*QuerySum(i,i-b,a)%MOD*QuerySum(j,j-d,c)%MOD)%MOD; } ret=((longlong)ret*C[cxk+left][cxk])%MOD; if (cxk&1) ans=(ans-ret+MOD)%MOD; else ans=(ans+ret)%MOD; --a,--b,--c,--d; if (a<0||b<0||c<0||d<0) break; } printf("%d\n",ans); }