
"""simple docstring"""
from __future__ import annotations

import math





def    _lowerCAmelCase    (     lowerCamelCase__							:							int,						lowerCamelCase__							:							int,						lowerCamelCase__							:							bool,						lowerCamelCase__							:							list[int],						lowerCamelCase__							:							float				)  ->    int:

  if depth < 0:
    raise ValueError("Depth cannot be less than 0"				)

  if len(lowerCamelCase__				) == 0:
    raise ValueError("Scores cannot be empty"				)

  if depth == height:
    return scores[node_index]

  if is_max:
    return max(
        minimax(depth + 1,						node_index * 2,						lowerCamelCase__,						lowerCamelCase__,						lowerCamelCase__				),						minimax(depth + 1,						node_index * 2 + 1,						lowerCamelCase__,						lowerCamelCase__,						lowerCamelCase__				),						)

  return min(
      minimax(depth + 1,						node_index * 2,						lowerCamelCase__,						lowerCamelCase__,						lowerCamelCase__				),						minimax(depth + 1,						node_index * 2 + 1,						lowerCamelCase__,						lowerCamelCase__,						lowerCamelCase__				),						)





def    _lowerCAmelCase    (     )  ->    None:
  _SCREAMING_SNAKE_CASE   :				Dict							    = [9_0, 2_3, 6, 3_3, 2_1, 6_5, 1_2_3, 3_4_4_2_3]
  _SCREAMING_SNAKE_CASE   :				str							    = math.log(len(lowerCamelCase__				),						2				)
  print("Optimal value : ",						end=""				)
  print(minimax(0,						0,						lowerCamelCase__,						lowerCamelCase__,						lowerCamelCase__				)				)


if __name__ == "__main__":
      import doctest

      doctest.testmod()
      main()





"""simple docstring"""
def    _lowerCAmelCase    (     lowerCamelCase__							:							str,						lowerCamelCase__							:							str				)  ->    Union[str, Any]:
  print("\nThe shortest path matrix using Floyd Warshall algorithm\n"				)
  for i in range(lowerCamelCase__				):
    for j in range(lowerCamelCase__				):
      if dist[i][j] != float("inf"				):
        print(int(dist[i][j]				),						end="\t"				)
      else:
        print("INF",						end="\t"				)
    print()





def    _lowerCAmelCase    (     lowerCamelCase__							:							Dict,						lowerCamelCase__							:							Any				)  ->    List[str]:
  _SCREAMING_SNAKE_CASE   :				List[Any]							    = [[float("inf"				) for _ in range(lowerCamelCase__				)] for _ in range(lowerCamelCase__				)]

  for i in range(lowerCamelCase__				):
    for j in range(lowerCamelCase__				):
      _SCREAMING_SNAKE_CASE   :				List[Any]							    = graph[i][j]

      # check vertex k against all other vertices (i, j)
  for k in range(lowerCamelCase__				):
    # looping through rows of graph array
    for i in range(lowerCamelCase__				):
      # looping through columns of graph array
      for j in range(lowerCamelCase__				):
        if (
            dist[i][k] != float("inf"				)
            and dist[k][j] != float("inf"				)
            and dist[i][k] + dist[k][j] < dist[i][j]
        ):
          _SCREAMING_SNAKE_CASE   :				List[Any]							    = dist[i][k] + dist[k][j]

  _print_dist(lowerCamelCase__,						lowerCamelCase__				)
  return dist, v


if __name__ == "__main__":
      lowercase_       :						Tuple     					=	int(input('''Enter number of vertices: '''))
      lowercase_       :						List[Any]     					=	int(input('''Enter number of edges: '''))

      lowercase_       :						Optional[Any]     					=	[[float('''inf''') for i in range(v)] for j in range(v)]

      for i in range(v):
            lowercase_       :						Tuple     					=	0.0

            # src and dst are indices that must be within the array size graph[e][v]
            # failure to follow this will result in an error
      for i in range(e):
            print('''\nEdge ''', i + 1)
            lowercase_       :						str     					=	int(input('''Enter source:'''))
            lowercase_       :						Optional[Any]     					=	int(input('''Enter destination:'''))
            lowercase_       :						Union[str, Any]     					=	float(input('''Enter weight:'''))
            lowercase_       :						str     					=	weight

      floyd_warshall(graph, v)

      # Example Input
      # Enter number of vertices: 3
      # Enter number of edges: 2

      # # generated graph from vertex and edge inputs
      # [[inf, inf, inf], [inf, inf, inf], [inf, inf, inf]]
      # [[0.0, inf, inf], [inf, 0.0, inf], [inf, inf, 0.0]]

      # specify source, destination and weight for edge #1
      # Edge  1
      # Enter source:1
      # Enter destination:2
      # Enter weight:2

      # specify source, destination and weight for edge #2
      # Edge  2
      # Enter source:2
      # Enter destination:1
      # Enter weight:1

      # # Expected Output from the vertice, edge and src, dst, weight inputs!!
      # 0		INF	INF
      # INF	0	2
      # INF	1	0



