For problem statement at 0-999/600-699/620-629/622/problemF.txt this is a correct solution, but verifier at 0-999/600-699/620-629/622/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func powmod(a, e int64) int64 {
res := int64(1)
for e > 0 {
if e&1 == 1 {
res = res * a % MOD
}
a = a * a % MOD
e >>= 1
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n int64
var k int
fmt.Fscan(in, &n, &k)
m := k + 1
y := make([]int64, m+1)
ke := int64(k)
for i := 1; i <= m; i++ {
y[i] = y[i-1] + powmod(int64(i), ke)
if y[i] >= MOD {
y[i] -= MOD
}
}
if n <= int64(m) {
fmt.Fprintln(out, y[int(n)])
return
}
factM := int64(1)
for i := 1; i <= m; i++ {
factM = factM * int64(i) % MOD
}
invfact := make([]int64, m+1)
invfact[m] = powmod(factM, MOD-2)
for i := m; i >= 1; i-- {
invfact[i-1] = invfact[i] * int64(i) % MOD
}
nm := n % MOD
pre := make([]int64, m+1)
pre[0] = 1
for i := 0; i < m; i++ {
pre[i+1] = pre[i] * (nm - int64(i)) % MOD
}
ans := int64(0)
suf := int64(1)
for i := m; i >= 0; i-- {
term := y[i]
term = term * pre[i] % MOD
term = term * suf % MOD
term = term * invfact[i] % MOD
term = term * invfact[m-i] % MOD
if (m-i)&1 == 1 {
ans -= term
if ans < 0 {
ans += MOD
}
} else {
ans += term
if ans >= MOD {
ans -= MOD
}
}
suf = suf * (nm - int64(i)) % MOD
}
fmt.Fprintln(out, ans)
}