https://www.acmicpc.net/problem/10026
from sys import stdin
from collections import deque
input = stdin.readline
n = int(input())
# arr 생성
arr = []
for _ in range(n):
arr.append(list(input().strip()))
# 방문 여부를 기록하는 visited 배열
visited = [[False]*n for _ in range(n)]
# BFS 함수. 인자로 받은 color를 탐색한다
# color: RG일 때는, R과 G를 탐색한다
def bfs(row, col, color):
queue = deque([(row, col)])
visited[row][col] = color
while queue:
r, c = queue.popleft()
dirs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
for dir in dirs:
new_r = r + dir[0]
new_c = c + dir[1]
# 유효 범위 내에 있을 때
if 0 <= new_r < n and 0 <= new_c < n:
# 만약 탐색하고 있는 color가 "RG"라면
if color == "RG":
# 색이 R이거나 G이고,
if arr[new_r][new_c] == "R" or arr[new_r][new_c] == "G":
# 아직 방문하지 않았다면
if not visited[new_r][new_c]:
# visited에 기록하고
visited[new_r][new_c] = True
# queue에 추가
queue.append((new_r, new_c))
# 탐색하고 있는 color가 "RG"가 아니면
else:
# 탐색하고 있는 color와 같은 색이고, 아직 방문하지 않았다면
if arr[new_r][new_c] == color and not visited[new_r][new_c]:
# visited에 기록하고
visited[new_r][new_c] = True
# queue에 추가
queue.append((new_r, new_c))
# 적록색약이 아닌 사람이 보는 구역의 수
count = 0
# 적록색약인 사람이 보는 구역의 수
rg_count = 0
# 적록색약이 아닌 사람
for row in range(n):
for col in range(n):
if not visited[row][col]:
# R
if arr[row][col] == "R":
bfs(row, col, "R")
count += 1
# G
elif arr[row][col] == "G":
bfs(row, col, "G")
count += 1
# B
elif arr[row][col] == "B":
bfs(row, col, "B")
count += 1
# 적록색약인 사람
# visited 초기화
visited = [[False]*n for _ in range(n)]
for row in range(n):
for col in range(n):
if not visited[row][col]:
# RG
if arr[row][col] == "R" or arr[row][col] == "G":
bfs(row, col, "RG")
rg_count += 1
# B
elif arr[row][col] == "B":
bfs(row, col, "B")
rg_count += 1
print(count, rg_count)