output_description: Print the number of operations that will be performed.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      H W
      A_{11}A_{12}...A_{1W}
      :
      A_{H1}A_{H2}...A_{HW}
attempt: import sys
  import numpy as np
  from collections import deque
  
  h, w = map(int, input().split())
  a = np.array([[c for c in l.strip()] for l in sys.stdin])
  q_x = deque()
  q_y = deque()
  b_plus = [[1, 0], [-1, 0], [0, 1], [0, -1]]
  dist = np.full((h, w), -1)
  
  black = np.argwhere(a == "#")
  
  for b in black:
      dist[b[0], b[1]] = 0
      for row in b_plus:
          b_n = b + row
          if 0 <= b_n[0] <= w - 1 and 0 <= b_n[1] <= h - 1:
              if not a[b_n[0], b_n[1]] == "#":
                  a[b_n[0], b_n[1]] = "#"
                  q_y.append(b_n[0])
                  q_x.append(b_n[1])
                  dist[b_n[0], b_n[1]] = dist[b[0], b[1]] + 1
  
  while len(q_y) > 0:
      v_y = q_y.popleft()
      v_x = q_x.popleft()
      for i in b_plus:
          nv_y = v_y + i[0]
          nv_x = v_x + i[1]
          if 0 <= nv_y <= h - 1 and 0 <= nv_x <= w - 1:
              if a[nv_y, nv_x] == "#":
                  None
              elif not dist[nv_y, nv_x] == -1:
                  None
              else:
                  dist[nv_y, nv_x] = dist[v_y, v_x] + 1
                  q_y.append(nv_y)
                  q_x.append(nv_x)
  
  print(int(np.amax(dist)))
  
problem_description: Statement
  
  You are given a grid of squares with H horizontal rows and W vertical columns,
  where each square is painted white or black. HW characters from A_{11} to
  A_{HW} represent the colors of the squares. A_{ij} is `#` if the square at the
  i-th row from the top and the j-th column from the left is black, and A_{ij}
  is `.` if that square is white.
  
  We will repeatedly perform the following operation until all the squares are
  black:
  
    * Every white square that shares a side with a black square, becomes black.
  
  Find the number of operations that will be performed. The initial grid has at
  least one black square.
samples: [{"input": "3 3\n    ...\n    .#.\n    ...", "output": "2\n    \n\nAfter one operation, all but the corners of the grid will be black. After one\nmore operation, all the squares will be black.\n\n* * *"}, {"input": "6 6\n    ..#..#\n    ......\n    #..#..\n    ......\n    .#....\n    ....#.", "output": "3"}]