class Solution:
# @param board, a 2D array
# Capture all regions by modifying the input board in-place.
# Do not return any value.
def solve(self, board):
n = len(board)
if n <= 1: return
m = len(board[0])
if m <= 1: return
q = []
x, o, oo = 'X', 'O', 'o'
dir = ((-1, 0), (1, 0), (0, 1), (0, -1))
for i in range(m):
if board[0][i] == o:
board[0][i] = oo
q.append((0,i))
if board[n - 1][i] == o:
board[n - 1][i] = oo
q.append((n - 1, i))
for i in range(n):
if board[i][0] == o:
board[i][0] = oo
q.append((i, 0))
if board[i][m - 1] == o:
board[i][m - 1] = oo
q.append((i, m - 1))
while len(q) > 0:
r, c = q[0]
del q[0]
for i in range(len(dir)):
nr, nc = r + dir[i][0], c + dir[i][1]
if 0 <= nr < n and 0 <= nc < m and board[nr][nc] == o:
board[nr][nc] = oo
q.append((nr,nc))
for i in range(n):
for j in range(m):
if board[i][j] == oo:
board[i][j] = o
elif board[i][j] == o:
board[i][j] = x