← Home
For problem statement at 1000-1999/1500-1599/1590-1599/1592/problemF2.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1590-1599/1592/verifierF2.go ends with All 45 tests passed. can you fix the verifier? ```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, m int
	if _, err := fmt.Fscan(reader, &n, &m); err != nil {
		return
	}

	A := make([][]int, n+2)
	for i := range A {
		A[i] = make([]int, m+2)
	}

	for i := 1; i <= n; i++ {
		var s string
		fmt.Fscan(reader, &s)
		for j := 1; j <= m; j++ {
			if s[j-1] == 'B' {
				A[i][j] = 1
			}
		}
	}

	D := make([][]int, n+1)
	for i := range D {
		D[i] = make([]int, m+1)
	}

	totalOnes := 0
	for i := 1; i <= n; i++ {
		for j := 1; j <= m; j++ {
			D[i][j] = A[i][j] ^ A[i+1][j] ^ A[i][j+1] ^ A[i+1][j+1]
			if D[i][j] == 1 {
				totalOnes++
			}
		}
	}

	adj := make([][]int, n)
	for i := 1; i < n; i++ {
		for j := 1; j < m; j++ {
			if D[i][j] == 1 && D[i][m] == 1 && D[n][j] == 1 {
				adj[i] = append(adj[i], j)
			}
		}
	}

	match := make([]int, m)
	for j := 1; j < m; j++ {
		match[j] = -1
	}

	maxMatch := 0
	vis := make([]bool, m)
	var dfs func(int) bool
	dfs = func(u int) bool {
		for _, v := range adj[u] {
			if vis[v] {
				continue
			}
			vis[v] = true
			if match[v] == -1 || dfs(match[v]) {
				match[v] = u
				return true
			}
		}
		return false
	}

	for i := 1; i < n; i++ {
		for j := 1; j < m; j++ {
			vis[j] = false
		}
		if dfs(i) {
			maxMatch++
		}
	}

	ans := totalOnes - maxMatch
	if D[n][m] == 1 {
		ans--
	}
	if (D[n][m] ^ (maxMatch % 2)) == 1 {
		ans++
	}

	fmt.Println(ans)
}
```