← Home
For problem statement at 0-999/200-299/220-229/220/problemD.txt this is a correct solution, but verifier at 0-999/200-299/220-229/220/verifierD.go ends with case 1 failed
expected:
30716604

got:
23408208

exit status 1 can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD int64 = 1000000007

func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func mul(a, b int64) int64 {
	return (a % MOD) * (b % MOD) % MOD
}

func prod3(a, b, c int64) int64 {
	return mul(mul(a, b), c)
}

func c3(n int64) int64 {
	if n < 3 {
		return 0
	}
	return n * (n - 1) * (n - 2) / 6
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var w, h int
	fmt.Fscan(in, &w, &h)

	xe := int64(w/2 + 1)
	xo := int64(w+1) - xe
	ye := int64(h/2 + 1)
	yo := int64(h+1) - ye

	n00 := xe * ye
	n01 := xe * yo
	n10 := xo * ye
	n11 := xo * yo

	N := int64(w+1) * int64(h+1)
	total := prod3(N, N-1, N-2)

	s := prod3(n00, n01, n10)
	s = (s + prod3(n00, n01, n11)) % MOD
	s = (s + prod3(n00, n10, n11)) % MOD
	s = (s + prod3(n01, n10, n11)) % MOD
	bad := 6 * s % MOD

	evenArea := (total - bad + MOD) % MOD

	col := int64(0)
	col = (col + int64(h+1)%MOD*c3(int64(w+1))%MOD) % MOD
	col = (col + int64(w+1)%MOD*c3(int64(h+1))%MOD) % MOD

	hp1 := h + 1
	for dx := 1; dx <= w; dx++ {
		wx := int64(w + 1 - dx)
		row := int64(0)
		for dy := 1; dy <= h; dy++ {
			g := gcd(dx, dy)
			if g > 1 {
				row += 2 * wx * int64(hp1-dy) * int64(g-1)
			}
		}
		col = (col + row%MOD) % MOD
	}

	col = col * 6 % MOD

	ans := (evenArea - col + MOD) % MOD
	fmt.Fprintln(out, ans)
}
```