#include using namespace std; #define ll long long #define mod 998244353LL ll f[1010][1010],c[1010][1010],fac[1010]; int num[1010],cnt[1010],sum[1010],t,n,tt; inline int rd() { int x=0;char ch=getchar(); for (;ch<'0'||ch>'9';ch=getchar()); for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; return x; } inline ll pls(const ll &x,const ll &y) { return (x+y>=1,x=x*x%mod) if (y&1) res=res*x%mod;return res; } inline void pre_gao() { for (int i=0;i<=1000;i++) { c[i][0]=1; for (int j=1;j<=i;j++) c[i][j]=pls(c[i-1][j-1],c[i-1][j]); } fac[0]=1; for (int i=1;i<=1000;i++) fac[i]=fac[i-1]*i%mod; } inline void gao() { n=rd(); for (int i=1;i<=n;i++) num[i]=rd(); sort(num+1,num+n+1);tt=0; for (int i=1;i<=n;) { int j=i; for (;j<=n&&num[j]==num[i];j++); cnt[++tt]=j-i;i=j; } for (int i=1;i<=tt;i++) sum[i]=sum[i-1]+cnt[i]; memset(f,0,sizeof(f)); f[0][0]=1; for (int i=1;i<=tt;i++) for (int j=0;j<=sum[i-1];j++) if (f[i-1][j]) { for (int k=0;k<=min(cnt[i],j);k++) { f[i][j-k+(cnt[i]-k)]=(f[i][j-k+(cnt[i]-k)]+f[i-1][j]*c[j][k])%mod; } } ll ans=0; for (int i=0;i<=sum[tt];i++) ans=pls(ans,f[tt][i]); for (int i=1;i<=tt;i++) ans=ans*fac[cnt[i]]%mod; printf("%I64d\n",ans); } int main() { t=rd();pre_gao(); while (t--) gao(); return 0; }