





import heapq







def      A__				(       SCREAMING_SNAKE_CASE__   ,   SCREAMING_SNAKE_CASE__   ,   SCREAMING_SNAKE_CASE__)  ->       Optional[int]:
  __snake_case:		str					    =		[(0, start)]  # cost from start node,end node
  __snake_case:		List[str]					    =		set()
  while heap:
    (__snake_case):		Optional[Any]					    =		heapq.heappop(SCREAMING_SNAKE_CASE__)
    if u in visited:
      continue
    visited.add(SCREAMING_SNAKE_CASE__)
    if u == end:
      return cost
    for v, c in graph[u]:
      if v in visited:
        continue
      __snake_case:		Optional[Any]					    =		cost + c
      heapq.heappush(SCREAMING_SNAKE_CASE__   ,   (next_item, v))
  return -1


__UpperCAmelCase			:  Union[str, Any]										=				{
    "A": [["B", 2], ["C", 5]],
    "B": [["A", 2], ["D", 3], ["E", 1], ["F", 1]],
    "C": [["A", 5], ["F", 3]],
    "D": [["B", 3]],
    "E": [["B", 4], ["F", 3]],
    "F": [["C", 3], ["E", 3]],
}
__UpperCAmelCase			:  List[str]										=				{
    "B": [["C", 1]],
    "C": [["D", 1]],
    "D": [["F", 1]],
    "E": [["B", 1], ["F", 3]],
    "F": [],
}
__UpperCAmelCase			:  Optional[int]										=				{
    "B": [["C", 1]],
    "C": [["D", 1]],
    "D": [["F", 1]],
    "E": [["B", 1], ["G", 2]],
    "F": [],
    "G": [["F", 1]],
}

__UpperCAmelCase			:  List[Any]										=				dijkstra(G, "E", "C")
print(short_distance)  # E -- 3 --> F -- 3 --> C == 6

__UpperCAmelCase			:  List[Any]										=				dijkstra(Ga, "E", "F")
print(short_distance)  # E -- 3 --> F == 3

__UpperCAmelCase			:  int										=				dijkstra(Ga, "E", "F")
print(short_distance)  # E -- 2 --> G -- 1 --> F == 3

if __name__ == "__main__":
      import doctest

      doctest.testmod()












def    UpperCAmelCase__	(  lowerCamelCase ):
  lowercase     :Optional[int]   						=    len(lowerCamelCase )
  if n in (0, 1):
    return 0
  return sum(query * (n - i - 1) for i, query in enumerate(sorted(lowerCamelCase ) ) )


if __name__ == "__main__":
     import doctest

     doctest.testmod()



