← Home
 ```go
package main

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

const MOD int32 = 1e9 + 7

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

	var t int
	fmt.Fscan(scanner, &t)

	for ; t > 0; t-- {
		var n, k int
		fmt.Fscan(scanner, &n, &k)
		c := make([]int, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(scanner, &c[i])
		}

		size := (n + 1) * k
		cbBlocks := make([]int16, size)
		cbWays := make([]int32, size)
		for i := range cbBlocks {
			cbBlocks[i] = -1
		}

		var globalB int16 = 0
		var globalW int32 = 1

		for i := 0; i < n; i++ {
			x := c[i]
			prevB := globalB
			prevW := globalW

			for r := 1; r < k; r++ {
				idx := x*k + r
				curB := cbBlocks[idx]
				curW := cbWays[idx]

				if prevB > cbBlocks[idx] {
					cbBlocks[idx] = prevB
					cbWays[idx] = prevW
				} else if prevB == cbBlocks[idx] {
					newW := cbWays[idx] + prevW
					if newW >= MOD {
						newW -= MOD
					}
					cbWays[idx] = newW
				}

				prevB, prevW = curB, curW
			}

			if prevB >= 0 {
				curB := prevB + 1
				curW := prevW
				if curB > globalB {
					globalB = curB
					globalW = curW
				} else if curB == globalB {
					globalW += curW
					if globalW >= MOD {
						globalW -= MOD
					}
				}
			}
		}

		fmt.Fprintln(writer, globalW)
	}
}
```