#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000000 #define Inf64 1000000000000000001LL int main(){ int _t; cin>>_t; rep(_,_t){ int n; cin>>n; vector pos(n,-1); vector aa(n); rep(i,n){ int a; cin>>a; a--; aa[i] = a; if(a>=0)pos[a] = i+1; } vector dp(n+1,0); dp[0] = 1; rep(i,n){ vector ndp(n+1,0); mint booked = 0; rep(j,n+1){ if(j>0 && aa[j-1]>i)booked++; if(dp[j]==0)continue; if(pos[i]==-1){ { ndp[j] += dp[j] * (j-i-booked); } for(int k=1;k<=2;k++){ if(j+k <= n && aa[j+k-1]==-2)ndp[j+k] += dp[j]; } } else{ if(pos[i] - j <= 2){ ndp[max(pos[i],j)] += dp[j]; } } } swap(dp,ndp); /*rep(j,n+1){ cout<