Code:
#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
#define maxn 400000
#define N 100005
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
ll qpow(ll base,ll k)
{
ll tmp=1;
while(k)
{
if(k&1) tmp=tmp*base%mod;
base=base*base%mod;
k>>=1;
}
return tmp;
}
void NTT(ll *a,int n,int flag)
{
for(int i=0,k=0;i<n;++i)
{
if(i>k) swap(a[i],a[k]);
for(int j=n>>1;(k^=j)<j;j>>=1);
}
for(int mid=1;mid<n;mid<<=1)
{
ll wn=qpow(3, (mod-1)/(mid<<1)),x,y;
if(flag==-1) wn=qpow(wn,mod-2);
for(int i=0;i<n;i+=(mid<<1))
{
ll w=1;
for(int j=0;j<mid;++j)
{
x=a[i+j],y=w*a[i+j+mid];
a[i+j]=(x+y)%mod,a[i+j+mid]=(x-y+mod)%mod;
w=w*wn%mod;
}
}
}
if(flag==-1)
{
ll rev=qpow(n,mod-2);
for(int i=0;i<n;++i) a[i]=a[i]*rev%mod;
}
}
ll f[maxn],g[maxn],A[maxn],B[maxn];
void solve(int l,int r)
{
if(l==r) return;
int mid=(l+r)>>1,len;
solve(l,mid);
for(len=1;len<=(r-l+1);len<<=1);
for(int i=l;i<=mid;++i) A[i-l]=f[i];
for(int i=1;i<=r-l;++i) B[i-1]=g[i];
NTT(A,len,1),NTT(B,len,1);
for(int i=0;i<len;++i) A[i]=A[i]*B[i]%mod;
NTT(A,len,-1);
for(int i=mid+1;i<=r;++i) f[i]=(f[i]-A[i-l-1]+mod)%mod;
for(int i=0;i<=len;++i) A[i]=B[i]=0;
solve(mid+1,r);
}
void Initialize()
{
f[1]=g[0]=1;
for(int i=1;i<=N;++i) f[i]=g[i]=g[i-1]*i%mod;
}
int main()
{
// setIO("input");
Initialize();
int T,x;
solve(1, 100003);
scanf("%d",&T);
while(T--)
{
scanf("%d",&x);
printf("%lld\n",f[x]);
}
return 0;
}