class Solution:
def latestDayToCross(self, row: int, col: int, cells: List[List[int]]) -> int:
def can(d):
visited = set()
q = collections.deque([(0,j) for j in range(col)])
for x, y in cells[:d]:
visited.add((x-1, y-1))
while q:
x,y = q.popleft()
if (x,y) in visited: continue
visited.add((x,y))
if x == row - 1: return True
for dx, dy in [(1,0), (-1,0), (0,1), (0,-1)]:
if 0 <= x + dx < row and 0 <= y + dy < col: q.append((x+dx, y+dy))
return False
l, r = 0, row * col
while l <=r :
mid = (l+r)//2
if can(mid):
l = mid + 1
else:
r = mid - 1
return r