


"""simple docstring"""
from heapq import heappop, heappush

import numpy as np







def 						_a				(      _SCREAMING_SNAKE_CASE				, _SCREAMING_SNAKE_CASE				, _SCREAMING_SNAKE_CASE				, _SCREAMING_SNAKE_CASE				, )    ->				tuple[float | int, list[tuple[int, int]]]:
							snake_case_       ,						snake_case_           =		grid.shape
							snake_case_           =		[-1, 1, 0, 0]
							snake_case_           =		[0, 0, -1, 1]
							if allow_diagonal:
														dx += [-1, -1, 1, 1]
														dy += [-1, 1, -1, 1]

							snake_case_       ,						snake_case_           =		[(0, source)], set()
							snake_case_           =		np.full((rows, cols)				, np.inf				)
							snake_case_           =		0
							snake_case_           =		np.empty((rows, cols)				, dtype=_SCREAMING_SNAKE_CASE				)
							snake_case_           =		None

							while queue:
														((snake_case_)       ,						(snake_case_))           =		heappop(_SCREAMING_SNAKE_CASE				)
														if (x, y) in visited:
																					continue
														visited.add((x, y)				)

														if (x, y) == destination:
																					snake_case_           =		[]
																					while (x, y) != source:
																												path.append((x, y)				)
																												snake_case_       ,						snake_case_           =		predecessors[x, y]
																					path.append(_SCREAMING_SNAKE_CASE				)  # add the source manually
																					path.reverse()
																					return matrix[destination], path

														for i in range(len(_SCREAMING_SNAKE_CASE				)				):
																					snake_case_       ,						snake_case_           =		x + dx[i], y + dy[i]
																					if 0 <= nx < rows and 0 <= ny < cols:
																												snake_case_           =		grid[nx][ny]
																												if next_node == 1 and matrix[nx, ny] > dist + 1:
																																			heappush(_SCREAMING_SNAKE_CASE				, (dist + 1, (nx, ny))				)
																																			snake_case_           =		dist + 1
																																			snake_case_           =		(x, y)

							return np.inf, []


if __name__ == "__main__":
				import doctest

				doctest.testmod()







"""simple docstring"""
from functools import reduce

__SCREAMING_SNAKE_CASE							:    Tuple		=    (
    '73167176531330624919225119674426574742355349194934'
    '96983520312774506326239578318016984801869478851843'
    '85861560789112949495459501737958331952853208805511'
    '12540698747158523863050715693290963295227443043557'
    '66896648950445244523161731856403098711121722383113'
    '62229893423380308135336276614282806444486645238749'
    '30358907296290491560440772390713810515859307960866'
    '70172427121883998797908792274921901699720888093776'
    '65727333001053367881220235421809751254540594752243'
    '52584907711670556013604839586446706324415722155397'
    '53697817977846174064955149290862569321978468622482'
    '83972241375657056057490261407972968652414535100474'
    '82166370484403199890008895243450658541227588666881'
    '16427171479924442928230863465674813919123162824586'
    '17866458359124566529476545682848912883142607690042'
    '24219022671055626321111109370544217506941658960408'
    '07198403850962455444362981230987879927244284909188'
    '84580156166097919133875499200524063689912560717606'
    '05886116467109405077541002256983155200055935729725'
    '71636269561882670428252483600823257530420752963450'
)







def 						_a				(      _SCREAMING_SNAKE_CASE = N				)    ->				int:
							return max(
							    # mypy cannot properly interpret reduce
							    int(reduce(lambda _SCREAMING_SNAKE_CASE				, _SCREAMING_SNAKE_CASE				: str(int(_SCREAMING_SNAKE_CASE				) * int(_SCREAMING_SNAKE_CASE				)				)				, n[i : i + 13]				)				)
							    for i in range(len(_SCREAMING_SNAKE_CASE				) - 12				)				)


if __name__ == "__main__":
				print(f"""{solution() = }""")



