class Solution {
public:
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int maxDistance(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
deque<pair<int, int>> deq;
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++) {
if(grid[i][j]) {
deq.push_back({i, j});
}
}
if(deq.size() == 0 || deq.size() == m * n) return -1;
int dis = -1;
while(deq.size() != 0) {
dis ++;
int size = deq.size();
while(size --) {
auto cur = deq.front();
deq.pop_front();
for(int i = 0; i < 4; i ++) {
int x = cur.first + dx[i], y = cur.second + dy[i];
if(x < 0 || x >= n || y < 0 || y >= m || grid[x][y] != 0) continue;
grid[x][y] = 2;
deq.push_back({x, y});
}
}
}
return dis;
}
};