← Home
For problem statement at 2000-2999/2000-2099/2090-2099/2092/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2090-2099/2092/verifierE.go ends with test 1 (sample) failed
input:
2
3 3 6
1 1 0
1 2 1
1 3 0
3 1 1
3 2 0
3 3 1
3 4 12
1 1 0
1 2 1
1 3 0
1 4 1
2 1 1
2 2 0
2 3 1
2 4 0
3 1 0
3 2 1
3 3 0
3 4 1
reference:
0
1

candidate:
4
0
exit status 1 can you fix the verifier? ```go
package main

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

const MOD int64 = 1000000007

func modPow(base, exp, mod int64) int64 {
	result := int64(1)
	base %= mod
	for exp > 0 {
		if exp&1 == 1 {
			result = result * base % mod
		}
		base = base * base % mod
		exp >>= 1
	}
	return result
}

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

	var t int
	fmt.Fscan(reader, &t)
	
	for i := 0; i < t; i++ {
		var n, m int64
		var k int
		fmt.Fscan(reader, &n, &m, &k)
		
		totalBoundary := int64(2*(n-2) + 2*(m-2))
		
		boundaryColored := int64(0)
		sumColors := int64(0)
		
		for j := 0; j < k; j++ {
			var x, y, c int64
			fmt.Fscan(reader, &x, &y, &c)
			
			if x == 1 || x == n || y == 1 || y == m {
				if !((x == 1 && y == 1) || (x == 1 && y == m) || (x == n && y == 1) || (x == n && y == m)) {
					boundaryColored++
					sumColors += c
				}
			}
		}
		
		freeBoundary := totalBoundary - boundaryColored
		var ans int64
		
		if freeBoundary > 0 {
			exp := n*m - int64(k) - 1
			ans = modPow(2, exp, MOD)
		} else {
			if sumColors%2 == 1 {
				ans = 0
			} else {
				exp := n*m - int64(k)
				ans = modPow(2, exp, MOD)
			}
		}
		
		fmt.Fprintln(writer, ans)
	}
}
```