← Home
For problem statement at 1000-1999/1800-1899/1830-1839/1833/problemF.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1830-1839/1833/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
)

const MOD = 1000000007

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	scanInt := func() int {
		scanner.Scan()
		val, _ := strconv.Atoi(scanner.Text())
		return val
	}

	if !scanner.Scan() {
		return
	}
	t, _ := strconv.Atoi(scanner.Text())

	for i := 0; i < t; i++ {
		n := scanInt()
		m := scanInt()
		a := make([]int, n)
		for j := 0; j < n; j++ {
			a[j] = scanInt()
		}

		sort.Ints(a)

		type pair struct {
			val, cnt int
		}
		var b []pair
		if n > 0 {
			curr := a[0]
			cnt := 1
			for j := 1; j < n; j++ {
				if a[j] == curr {
					cnt++
				} else {
					b = append(b, pair{curr, cnt})
					curr = a[j]
					cnt = 1
				}
			}
			b = append(b, pair{curr, cnt})
		}

		if len(b) < m {
			fmt.Fprintln(out, 0)
			continue
		}

		var ans int64 = 0
		var curProd int64 = 1

		for j := 0; j < m; j++ {
			curProd = (curProd * int64(b[j].cnt)) % MOD
		}

		if b[m-1].val == b[0].val+m-1 {
			ans = (ans + curProd) % MOD
		}

		for j := 1; j <= len(b)-m; j++ {
			prevCnt := int64(b[j-1].cnt)
			nextCnt := int64(b[j+m-1].cnt)

			var inv int64 = 1
			base := prevCnt
			exp := MOD - 2
			for exp > 0 {
				if exp&1 == 1 {
					inv = (inv * base) % MOD
				}
				base = (base * base) % MOD
				exp >>= 1
			}

			curProd = (curProd * inv) % MOD
			curProd = (curProd * nextCnt) % MOD

			if b[j+m-1].val == b[j].val+m-1 {
				ans = (ans + curProd) % MOD
			}
		}

		fmt.Fprintln(out, ans)
	}
}
```