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())
}