← Home
For problem statement at 1000-1999/1200-1299/1200-1209/1200/problemD.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1200-1209/1200/verifierD.go ends with all tests passed can you fix the verifier?  ```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, k int
	fmt.Fscan(reader, &n, &k)
	
	grid := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &grid[i])
	}
	
	rowMin := make([]int, n)
	rowMax := make([]int, n)
	for i := 0; i < n; i++ {
		rowMin[i] = n
		rowMax[i] = -1
	}
	
	colMin := make([]int, n)
	colMax := make([]int, n)
	for i := 0; i < n; i++ {
		colMin[i] = n
		colMax[i] = -1
	}
	
	baseWhiteRows := 0
	
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			if grid[i][j] == 'B' {
				if j < rowMin[i] {
					rowMin[i] = j
				}
				if j > rowMax[i] {
					rowMax[i] = j
				}
				if i < colMin[j] {
					colMin[j] = i
				}
				if i > colMax[j] {
					colMax[j] = i
				}
			}
		}
		if rowMax[i] == -1 {
			baseWhiteRows++
		}
	}
	
	baseWhiteCols := 0
	for j := 0; j < n; j++ {
		if colMax[j] == -1 {
			baseWhiteCols++
		}
	}
	
	m := n - k + 1
	if m <= 0 {
		fmt.Println(baseWhiteRows + baseWhiteCols)
		return
	}
	
	diff := make([][]int, m+2)
	for i := range diff {
		diff[i] = make([]int, m+2)
	}
	
	for r := 0; r < n; r++ {
		if rowMax[r] == -1 {
			continue
		}
		if rowMax[r]-rowMin[r]+1 > k {
			continue
		}
		i1 := r - k + 1
		if i1 < 0 {
			i1 = 0
		}
		i2 := r
		if i2 > m-1 {
			i2 = m - 1
		}
		j1 := rowMax[r] - k + 1
		if j1 < 0 {
			j1 = 0
		}
		j2 := rowMin[r]
		if j2 > m-1 {
			j2 = m - 1
		}
		if i1 <= i2 && j1 <= j2 {
			diff[i1][j1]++
			diff[i1][j2+1]--
			diff[i2+1][j1]--
			diff[i2+1][j2+1]++
		}
	}
	
	for c := 0; c < n; c++ {
		if colMax[c] == -1 {
			continue
		}
		if colMax[c]-colMin[c]+1 > k {
			continue
		}
		i1 := colMax[c] - k + 1
		if i1 < 0 {
			i1 = 0
		}
		i2 := colMin[c]
		if i2 > m-1 {
			i2 = m - 1
		}
		j1 := c - k + 1
		if j1 < 0 {
			j1 = 0
		}
		j2 := c
		if j2 > m-1 {
			j2 = m - 1
		}
		if i1 <= i2 && j1 <= j2 {
			diff[i1][j1]++
			diff[i1][j2+1]--
			diff[i2+1][j1]--
			diff[i2+1][j2+1]++
		}
	}
	
	maxVal := 0
	for i := 0; i < m; i++ {
		for j := 0; j < m; j++ {
			if i > 0 {
				diff[i][j] += diff[i-1][j]
			}
			if j > 0 {
				diff[i][j] += diff[i][j-1]
			}
			if i > 0 && j > 0 {
				diff[i][j] -= diff[i-1][j-1]
			}
			if diff[i][j] > maxVal {
				maxVal = diff[i][j]
			}
		}
	}
	
	fmt.Println(baseWhiteRows + baseWhiteCols + maxVal)
}
```