#include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair pr; const double pi=acos(-1); #define rep(i,a,n) for(int i=a;i<=n;i++) #define per(i,n,a) for(int i=n;i>=a;i--) #define Rep(i,u) for(int i=head[u];i;i=Next[i]) #define clr(a) memset(a,0,sizeof a) #define pb push_back #define mp make_pair ld eps=1e-9; ll pp=998244353; ll mo(ll a,ll pp){if(a>=0 && a>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;} ll read(){ ll ans=0; char last=' ',ch=getchar(); while(ch<'0' || ch>'9')last=ch,ch=getchar(); while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar(); if(last=='-')ans=-ans; return ans; } //head #define N 1100 int n; ll dp[N][N]; int a[N],m,s[N]; ll C[N][N]; void add(ll &a, ll b){ a=(a+b)%pp; } void solved(){ n=read(); rep(i,1,n)a[i]=read(); sort(a+1,a+n+1); int tot=0; m=0; rep(i,1,n){ tot++; if(i==n || a[i]!=a[i+1]){ s[++m]=tot; tot=0; } } rep(i,1,m) rep(j,0,n)dp[i][j]=0; dp[1][s[1]]=1; rep(i,1,m-1) rep(j,0,n) if(dp[i][j]){ for(int k=0;k<=min(j,s[i+1]);k++) add(dp[i+1][j-k+(s[i+1]-k)], dp[i][j]*C[j][k]%pp); } ll ans = 0; rep(j,0,n)add(ans,dp[m][j]); rep(i,1,m){ rep(j,1,s[i])ans=ans*j%pp; } cout<