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))
}
}