← Home
package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

const MOD int64 = 998244353

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	readInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	t := readInt()
	ns := make([]int, t)
	maxN := 0
	for i := 0; i < t; i++ {
		ns[i] = readInt()
		if ns[i] > maxN {
			maxN = ns[i]
		}
	}

	ans := make([]int64, maxN+1)
	if maxN >= 2 {
		ans[2] = 1
	}
	if maxN >= 3 {
		ans[3] = 2
	}

	prefixX := int64(0)
	S := int64(0)
	xPrev := int64(0)

	for n := 4; n <= maxN; n++ {
		term := int64(n-2)*int64(n-1)/2 - 1
		x := (int64(n-1)*xPrev + term + S) % MOD
		prefixX += x
		if prefixX >= MOD {
			prefixX -= MOD
		}
		ans[n] = (int64(n-1) + prefixX) % MOD
		S += int64(n-1) * xPrev % MOD
		if S >= MOD {
			S -= MOD
		}
		xPrev = x
	}

	var out bytes.Buffer
	for _, n := range ns {
		out.WriteString(strconv.FormatInt(ans[n], 10))
		out.WriteByte('\n')
	}
	os.Stdout.Write(out.Bytes())
}