const int dx[] = {0, 1, -1, 0};
const int dy[] = {-1, 0, 0, 1};
class Solution {
public:
int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
int n = maze.size(), m = maze[0].size();
queue<pair<int, int>> q;
q.push({entrance[0], entrance[1]});
int res = 0;
// cout << n << " " << m << endl;
while (!q.empty()) {
int l = q.size();
for (int i = 0; i < l; i++) {
auto [x, y] = q.front();
//maze[x][y] = 'x';
q.pop();
if ((x == 0 || x == n - 1 || y == 0 || y == m - 1) && !(x == entrance[0] && y == entrance[1])) {
return res;
}
for (int k = 0; k < 4; k++) {
int a = x + dx[k];
int b = y + dy[k];
if (a >= 0 && a < n && b >= 0 && b < m && maze[a][b] == '.') {
maze[a][b] = 'x';
q.push({a, b});
}
}
}
res++;
}
return -1;
}
};