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