← Home
package main

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

type Point struct {
	x, y int
}

func solve(grid []string) int {
	ans := 0

	for p := 0; p < 2; p++ {
		centers := make([]Point, 0)
		for i := 1; i < 6; i++ {
			for j := 1; j < 6; j++ {
				if ((i + j) & 1) != p || grid[i][j] != 'B' {
					continue
				}
				if grid[i-1][j-1] == 'B' && grid[i-1][j+1] == 'B' && grid[i+1][j-1] == 'B' && grid[i+1][j+1] == 'B' {
					centers = append(centers, Point{i, j})
				}
			}
		}

		m := len(centers)
		if m == 0 {
			continue
		}

		cellMasks := make([]int, 0)
		for i := 0; i < 7; i++ {
			for j := 0; j < 7; j++ {
				if ((i + j) & 1) != p || grid[i][j] != 'B' {
					continue
				}
				mask := 0
				for k, c := range centers {
					if (i == c.x && j == c.y) ||
						(i == c.x-1 && j == c.y-1) ||
						(i == c.x-1 && j == c.y+1) ||
						(i == c.x+1 && j == c.y-1) ||
						(i == c.x+1 && j == c.y+1) {
						mask |= 1 << k
					}
				}
				if mask != 0 {
					cellMasks = append(cellMasks, mask)
				}
			}
		}

		full := 1 << m
		const inf = int(1e9)
		dp := make([]int, full)
		for i := 1; i < full; i++ {
			dp[i] = inf
		}

		for _, cm := range cellMasks {
			for mask := 0; mask < full; mask++ {
				if dp[mask] == inf {
					continue
				}
				nm := mask | cm
				if dp[mask]+1 < dp[nm] {
					dp[nm] = dp[mask] + 1
				}
			}
		}

		ans += dp[full-1]
	}

	return ans
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		grid := make([]string, 7)
		for i := 0; i < 7; i++ {
			fmt.Fscan(in, &grid[i])
		}
		fmt.Fprintln(out, solve(grid))
	}
}