


"""simple docstring"""
from queue import PriorityQueue
from typing import Any

import numpy as np







def   _a			( _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	)      ->			str:






							for nxt, d in graph[v]:
														if nxt in visited_forward:
																					continue
														snake_case_          =						cst_fwd.get(_SCREAMING_SNAKE_CASE			,	np.inf			)
														snake_case_          =						cst_fwd[v] + d
														if new_cost_f < old_cost_f:
																					queue.put((new_cost_f, nxt)			)
																					snake_case_          =						new_cost_f
																					snake_case_          =						v
														if nxt in visited_backward:
																					if cst_fwd[v] + d + cst_bwd[nxt] < shortest_distance:
																												snake_case_          =						cst_fwd[v] + d + cst_bwd[nxt]
							return shortest_distance







def   _a			( _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			)      ->			Any:
							snake_case_          =						-1

							snake_case_          =						set()
							snake_case_          =						set()
							snake_case_          =						{source: 0}
							snake_case_          =						{destination: 0}
							snake_case_          =						{source: None}
							snake_case_          =						{destination: None}
							snake_case_          =						PriorityQueue()
							snake_case_          =						PriorityQueue()

							snake_case_          =						np.inf

							queue_forward.put((0, source)			)
							queue_backward.put((0, destination)			)

							if source == destination:
														return 0

							while not queue_forward.empty() and not queue_backward.empty():
														snake_case_    ,  snake_case_          =						queue_forward.get()
														visited_forward.add(_SCREAMING_SNAKE_CASE			)

														snake_case_    ,  snake_case_          =						queue_backward.get()
														visited_backward.add(_SCREAMING_SNAKE_CASE			)

														snake_case_          =						pass_and_relaxation(
														    _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	)

														snake_case_          =						pass_and_relaxation(
														    _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			,	)

														if cst_fwd[v_fwd] + cst_bwd[v_bwd] >= shortest_distance:
																					break

							if shortest_distance != np.inf:
														snake_case_          =						shortest_distance
							return shortest_path_distance


__SCREAMING_SNAKE_CASE							:      Optional[Any]						=      {
    "B": [["C", 1]],
    "C": [["D", 1]],
    "D": [["F", 1]],
    "E": [["B", 1], ["G", 2]],
    "F": [],
    "G": [["F", 1]],
}
__SCREAMING_SNAKE_CASE							:      Tuple						=      {
    "B": [["E", 1]],
    "C": [["B", 1]],
    "D": [["C", 1]],
    "F": [["D", 1], ["G", 1]],
    "E": [[None, np.inf]],
    "G": [["E", 2]],
}

if __name__ == "__main__":
				import doctest

				doctest.testmod()








"""simple docstring"""
def   _a			( _SCREAMING_SNAKE_CASE			,	_SCREAMING_SNAKE_CASE			)      ->			str:
							return "\n".join(
							    f"""{number} * {i} = {number * i}""" for i in range(1			,	number_of_terms + 1			)			)


if __name__ == "__main__":
				print(multiplication_table(number=5, number_of_terms=10))



