

def 		UpperCamelCase_(    snake_case__:						int						,					snake_case__:						int						,					snake_case__:						int						,					snake_case__:						int     ) ->				int:
 return len_board * len_board_column * row + column
def 		UpperCamelCase_(    snake_case__:						list[list[str]]						,					snake_case__:						str						,					snake_case__:						int						,					snake_case__:						int						,					snake_case__:						int						,					snake_case__:						set[int]						,					) ->				bool:

 if board[row][column] != word[word_index]:
  return False

 if word_index == len(snake_case__     ) - 1:
  return True

 UpperCAmelCase__           =       [(0, 1), (0, -1), (-1, 0), (1, 0)]
 UpperCAmelCase__           =       len(snake_case__     )
 UpperCAmelCase__           =       len(board[0]     )
 for direction in traverts_directions:
  UpperCAmelCase__           =       row + direction[0]
  UpperCAmelCase__           =       column + direction[1]
  if not (0 <= next_i < len_board and 0 <= next_j < len_board_column):
   continue

  UpperCAmelCase__           =       get_point_key(snake_case__						,					snake_case__						,					snake_case__						,					snake_case__     )
  if key in visited_points_set:
   continue

  visited_points_set.add(snake_case__     )
  if exits_word(snake_case__						,					snake_case__						,					snake_case__						,					snake_case__						,					word_index + 1						,					snake_case__     ):
   return True

  visited_points_set.remove(snake_case__     )

 return False
def 		UpperCamelCase_(    snake_case__:						list[list[str]]						,					snake_case__:						str     ) ->				bool:
 UpperCAmelCase__           =       (
     'The board should be a non empty matrix of single chars strings.'
 )

 UpperCAmelCase__           =       len(snake_case__     )
 if not isinstance(snake_case__						,					snake_case__     ) or len(snake_case__     ) == 0:
  raise ValueError(snake_case__     )

 for row in board:
  if not isinstance(snake_case__						,					snake_case__     ) or len(snake_case__     ) == 0:
   raise ValueError(snake_case__     )

  for item in row:
   if not isinstance(snake_case__						,					snake_case__     ) or len(snake_case__     ) != 1:
    raise ValueError(snake_case__     )

    # Validate word
 if not isinstance(snake_case__						,					snake_case__     ) or len(snake_case__     ) == 0:
  raise ValueError(
      'The word parameter should be a string of length greater than 0.'     )

 UpperCAmelCase__           =       len(board[0]     )
 for i in range(snake_case__     ):
  for j in range(snake_case__     ):
   if exits_word(
       snake_case__						,					snake_case__						,					snake_case__						,					snake_case__						,					0						,					{get_point_key(snake_case__						,					snake_case__						,					snake_case__						,					snake_case__     )}     ):
    return True

 return False


if __name__ == "__main__":
 import doctest

 doctest.testmod()






from __future__ import annotations



class 					lowercase		:



 '''simple docstring'''


 def __init__(self , __a				)				->      None:






  """simple docstring"""





  UpperCAmelCase__           =       vertices
  UpperCAmelCase__           =       [[0] * vertices for _ in range(__a				)]




 def 						UpperCamelCase__							(self , __a				)				->      None:






  """simple docstring"""





  print('Vertex \t Distance from Source'				)
  for vertex in range(self.vertices				):
   print(__a , '\t\t' , distances_from_source[vertex]				)




 def 						UpperCamelCase__							(self , __a , __a				)				->      int:






  """simple docstring"""





  UpperCAmelCase__           =       1E7
  UpperCAmelCase__           =       0

  # Search not nearest vertex not in the shortest path tree
  for vertex in range(self.vertices				):
   if distances_from_source[vertex] < minimum and visited[vertex] is False:
    UpperCAmelCase__           =       distances_from_source[vertex]
    UpperCAmelCase__           =       vertex
  return min_index




 def 						UpperCamelCase__							(self , __a				)				->      None:






  """simple docstring"""





  UpperCAmelCase__           =       [int(1E7				)] * self.vertices  # distances from the source
  UpperCAmelCase__           =       0
  UpperCAmelCase__           =       [False] * self.vertices

  for _ in range(self.vertices				):
   UpperCAmelCase__           =       self.minimum_distance(__a , __a				)
   UpperCAmelCase__           =       True

   # Update dist value of the adjacent vertices
   # of the picked vertex only if the current
   # distance is greater than new distance and
   # the vertex in not in the shortest path tree
   for v in range(self.vertices				):
    if (
        self.graph[u][v] > 0
        and visited[v] is False
        and distances[v] > distances[u] + self.graph[u][v]
    ):
     UpperCAmelCase__           =       distances[u] + self.graph[u][v]

  self.print_solution(__a				)


if __name__ == "__main__":
 _UpperCamelCase     =    Graph(9)
 _UpperCamelCase     =    [
     [0, 4, 0, 0, 0, 0, 0, 8, 0],
     [4, 0, 8, 0, 0, 0, 0, 11, 0],
     [0, 8, 0, 7, 0, 4, 0, 0, 2],
     [0, 0, 7, 0, 9, 14, 0, 0, 0],
     [0, 0, 0, 9, 0, 10, 0, 0, 0],
     [0, 0, 4, 14, 10, 0, 2, 0, 0],
     [0, 0, 0, 0, 0, 2, 0, 1, 6],
     [8, 11, 0, 0, 0, 0, 1, 0, 7],
     [0, 0, 2, 0, 0, 0, 6, 7, 0],
 ]
 graph.dijkstra(0)



