class Solution { public: int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0}, n, m; void dfs(int row, int col, vector<vector<char>> &board) { board[row][col] = 'o'; for (int i = 0; i < 4; ++i) if (row + dx[i] >= 0 && row + dx[i] < n && col + dy[i] >= 0 && col + dy[i] < m && board[row + dx[i]][col + dy[i]] == 'O') dfs(row + dx[i], col + dy[i], board); } void solve(vector<vector<char>> &board) { n = board.size(), m = n ? board[0].size() : 0; if (!(m & n)) return; for (int i = 0; i < n; ++i) { if (board[i][0] == 'O') dfs(i, 0, board); if (board[i][m - 1] == 'O') dfs(i, m - 1, board); } for (int j = 0; j < m; ++j) { if (board[0][j] == 'O') dfs(0, j, board); if (board[n - 1][j] == 'O') dfs(n - 1, j, board); } for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) if (board[i][j] == 'O') board[i][j] = 'X'; else if (board[i][j] == 'o') board[i][j] = 'O'; } };