For problem statement at 1000-1999/1500-1599/1570-1579/1575/problemF.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1570-1579/1575/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"fmt"
"io"
"os"
)
const MOD int64 = 1000000007
func powMod(a, e int64) int64 {
r := int64(1)
for e > 0 {
if e&1 == 1 {
r = r * a % MOD
}
a = a * a % MOD
e >>= 1
}
return r
}
func calcJ(m int, kmod, km1 int64, inv, h []int64) []int64 {
j := make([]int64, m+1)
if m == 0 {
return j
}
j[0] = (MOD - h[m]) % MOD
cur := inv[m]
for c := 1; c <= m; c++ {
j[c] = (j[c-1] + kmod*cur) % MOD
if c < m {
cur = ((((km1 * int64(c)) % MOD) * cur) % MOD + 1) % MOD
cur = cur * inv[m-c] % MOD
}
}
return j
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] == ' ' || data[idx] == '\n' || data[idx] == '\r' || data[idx] == '\t') {
idx++
}
sign := 1
if data[idx] == '-' {
sign = -1
idx++
}
num := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
num = num*10 + int(data[idx]-'0')
idx++
}
return sign * num
}
n := nextInt()
k := nextInt()
cntVal := make(map[int]int)
known := 0
for i := 0; i < n; i++ {
x := nextInt()
if x != -1 {
cntVal[x]++
known++
}
}
inv := make([]int64, n+1)
h := make([]int64, n+1)
if n >= 1 {
inv[1] = 1
}
for i := 2; i <= n; i++ {
inv[i] = MOD - (MOD/int64(i))*inv[int(MOD%int64(i))]%MOD
}
for i := 1; i <= n; i++ {
h[i] = (h[i-1] + inv[i]) % MOD
}
kmod := int64(k)
km1 := kmod - 1
invk := powMod(kmod, MOD-2)
jAll := calcJ(n, kmod, km1, inv, h)
iAll := (jAll[n] + km1*jAll[0]) % MOD
iAll = iAll * invk % MOD
jKnown := calcJ(known, kmod, km1, inv, h)
freqCnt := make([]int, known+1)
for _, c := range cntVal {
freqCnt[c]++
}
d := len(cntVal)
sumJ := int64(0)
for c, num := range freqCnt {
if num != 0 {
sumJ = (sumJ + int64(num)*jKnown[c]) % MOD
}
}
coef0 := (kmod - int64(d)%MOD + MOD) % MOD
iKnown := (coef0*jKnown[0] + sumJ) % MOD
iKnown = iKnown * invk % MOD
ans := int64(n) % MOD
ans = ans * ((iAll - iKnown + MOD) % MOD) % MOD
fmt.Print(ans)
}