3
void dfs(vector<vector<int>> &grid, int x, int y, int m, int n, int dir) {4
if (x < 0 || y < 0 || x >= m || y >= n) return;5
if (grid[x][y] == 2 || grid[x][y] == 1) return;8
dfs(grid, x + 1, y, m, n, dir);10
dfs(grid, x, y + 1, m, n, dir);11
} else if (dir == 3) {12
dfs(grid, x - 1, y, m, n, dir);14
dfs(grid, x, y - 1, m, n, dir);17
int countUnguarded(int m, int n, vector<vector<int>> &guards, vector<vector<int>> &walls) {18
vector<vector<int>> grid(m, vector<int>(n, 0));20
for (int i = 0; i < guards.size(); i++) {26
for (int i = 0; i < walls.size(); i++) {31
// dfs in each of 4 directions32
for (int i = 0; i < guards.size(); i++) {35
dfs(grid, x + 1, y, m, n, 1);36
dfs(grid, x, y + 1, m, n, 2);37
dfs(grid, x - 1, y, m, n, 3);38
dfs(grid, x, y - 1, m, n, 4);40
long long int cnt = 0;41
for (int i = 0; i < m; i++) {42
for (int j = 0; j < n; j++) {43
if (grid[i][j] == 0) cnt++;