← Home
```go
package main

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

const MOD = 998244353

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

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var n, k int
		fmt.Fscan(in, &n, &k)

		dp := make([][]int, n+1)
		for i := range dp {
			dp[i] = make([]int, k)
		}

		for u := 0; u < k; u++ {
			dp[0][u] = 1
		}

		for s := 0; s <= n; s++ {
			for u := 0; u < k; u++ {
				cur := dp[s][u]
				if cur == 0 {
					continue
				}
				maxV1 := k - 1 - u
				if maxV1 < 0 {
					continue
				}
				remaining := n - s
				maxV2 := remaining/(u+1) - 1
				maxV := maxV1
				if maxV2 < maxV {
					maxV = maxV2
				}
				if maxV < 0 {
					continue
				}
				up1 := u + 1
				for v := 0; v <= maxV; v++ {
					ns := s + up1*(v+1)
					if ns <= n {
						dp[ns][v] = (dp[ns][v] + cur) % MOD
					}
				}
			}
		}

		ans := 0
		for u := 0; u < k; u++ {
			ans = (ans + dp[n][u]) % MOD
		}
		fmt.Fprintln(out, ans)
	}
}
```