For problem statement at 1000-1999/1100-1199/1100-1109/1105/problemC.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1100-1109/1105/verifierC.go ends with all tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func modAdd(a, b int64) int64 {
a += b
if a >= MOD {
a -= MOD
}
return a
}
func modMul(a, b int64) int64 {
return (a * b) % MOD
}
func countModInRange(l, r int64, m int64) int64 {
if r < l {
return 0
}
ll := l % 3
total := r - l + 1
base := total / 3
rem := total % 3
cnt := [3]int64{base, base, base}
start := ll
for i := int64(0); i < rem; i++ {
cnt[start]++
start = (start + 1) % 3
}
return cnt[m]
}
func main() {
in := bufio.NewReader(os.Stdin)
var n int64
var l, r int64
if _, err := fmt.Fscan(in, &n, &l, &r); err != nil {
return
}
c0 := countModInRange(l, r, 0)
c1 := countModInRange(l, r, 1)
c2 := countModInRange(l, r, 2)
dp0, dp1, dp2 := int64(1), int64(0), int64(0)
for i := int64(0); i < n; i++ {
ndp0 := modAdd(modAdd(modMul(dp0, c0), modMul(dp1, c2)), modMul(dp2, c1))
ndp1 := modAdd(modAdd(modMul(dp0, c1), modMul(dp1, c0)), modMul(dp2, c2))
ndp2 := modAdd(modAdd(modMul(dp0, c2), modMul(dp1, c1)), modMul(dp2, c0))
dp0, dp1, dp2 = ndp0, ndp1, ndp2
}
fmt.Println(dp0 % MOD)
}