← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD = 998244353

var fact []int64
var invFact []int64

func power(base, exp int64) int64 {
	res := int64(1)
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func modInverse(n int64) int64 {
	return power(n, MOD-2)
}

func precompute(maxN int) {
	fact = make([]int64, maxN+1)
	invFact = make([]int64, maxN+1)
	fact[0] = 1
	invFact[0] = 1
	for i := 1; i <= maxN; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}
	invFact[maxN] = modInverse(fact[maxN])
	for i := maxN - 1; i >= 1; i-- {
		invFact[i] = (invFact[i+1] * int64(i+1)) % MOD
	}
}

func nCr(n, r int) int64 {
	if r < 0 || r > n {
		return 0
	}
	return fact[n] * invFact[r] % MOD * invFact[n-r] % MOD
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	precompute(6005)

	for tc := 0; tc < t; tc++ {
		var n int
		fmt.Fscan(reader, &n)
		p := make([]int, n+1)
		sortedValid := true
		for i := 1; i <= n; i++ {
			fmt.Fscan(reader, &p[i])
			if p[i] != -1 && p[i] != i {
				sortedValid = false
			}
		}

		totalWays := int64(0)

		for k := 1; k < n; k++ {
			cx, cy := 0, 0
			ways := int64(1)

			for i := 1; i <= n; i++ {
				if p[i] == -1 {
					continue
				}

				var px, py, nx, ny int
				if p[i] <= k {
					px = p[i] - 1
					py = i - p[i]
					nx = p[i]
					ny = i - p[i]
				} else {
					px = i + k - p[i]
					py = p[i] - k - 1
					nx = i + k - p[i]
					ny = p[i] - k
				}

				if px < cx || py < cy {
					ways = 0
					break
				}

				ways = (ways * nCr((px-cx)+(py-cy), px-cx)) % MOD
				cx = nx
				cy = ny
			}

			if ways > 0 {
				nx, ny := k, n-k
				if nx < cx || ny < cy {
					ways = 0
				} else {
					ways = (ways * nCr((nx-cx)+(ny-cy), nx-cx)) % MOD
				}
			}

			totalWays = (totalWays + ways) % MOD
		}

		if sortedValid {
			totalWays = (totalWays - int64(n-2)%MOD + MOD) % MOD
		}

		fmt.Fprintln(writer, totalWays)
	}
}