





import sys

__A							:			Union[str, Any]         =			(
    "73167176531330624919225119674426574742355349194934"
    "96983520312774506326239578318016984801869478851843"
    "85861560789112949495459501737958331952853208805511"
    "12540698747158523863050715693290963295227443043557"
    "66896648950445244523161731856403098711121722383113"
    "62229893423380308135336276614282806444486645238749"
    "30358907296290491560440772390713810515859307960866"
    "70172427121883998797908792274921901699720888093776"
    "65727333001053367881220235421809751254540594752243"
    "52584907711670556013604839586446706324415722155397"
    "53697817977846174064955149290862569321978468622482"
    "83972241375657056057490261407972968652414535100474"
    "82166370484403199890008895243450658541227588666881"
    "16427171479924442928230863465674813919123162824586"
    "17866458359124566529476545682848912883142607690042"
    "24219022671055626321111109370544217506941658960408"
    "07198403850962455444362981230987879927244284909188"
    "84580156166097919133875499200524063689912560717606"
    "05886116467109405077541002256983155200055935729725"
    "71636269561882670428252483600823257530420752963450"
)





def 				__lowerCAmelCase(       _SCREAMING_SNAKE_CASE				)							-> int:




    """simple docstring"""




    _A     =							1
    for digit in s:
        product *= int(_SCREAMING_SNAKE_CASE				)
    return product





def 				__lowerCAmelCase(       _SCREAMING_SNAKE_CASE = N				)							-> int:




    """simple docstring"""




    _A     =							-sys.maxsize - 1
    _A     =							n[:13]
    _A     =							13
    while cur_index < len(_SCREAMING_SNAKE_CASE				) - 13:
        if int(n[cur_index]				) >= int(substr[0]				):
            _A     =							substr[1:] + n[cur_index]
            cur_index += 1
        else:
            _A     =							max(_SCREAMING_SNAKE_CASE							,     str_eval(_SCREAMING_SNAKE_CASE				)				)
            _A     =							n[cur_index : cur_index + 13]
            cur_index += 13
    return largest_product


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











'''simple docstring'''

from collections.abc import Sequence
from queue import Queue






class 		a							:


				def __init__(						self       :   List[str]			,							lowercase_       :   str			,							lowercase_       :   List[Any]			,							lowercase_       :   Dict			,							lowercase_       :   int=None			,							lowercase_       :   List[Any]=None   ):
									snake_case_		     =							start
									snake_case_		     =							end
									snake_case_		     =							val
									snake_case_		     =							(start + end) // 2
									snake_case_		     =							left
									snake_case_		     =							right


				def __repr__(						self       :   Any   ):
									return F"SegmentTreeNode(start={self.start}, end={self.end}, val={self.val})"







class 		a							:


				def __init__(						self       :   Any			,							lowercase_       :   Sequence			,							lowercase_       :   List[str]   ):
									snake_case_		     =							collection
									snake_case_		     =							function
									if self.collection:
														snake_case_		     =							self._build_tree(0			,							len(lowercase_   ) - 1   )


				def     A_					(						self       :   Any			,							lowercase_       :   Dict			,							lowercase_       :   Dict   ):
									self._update_tree(self.root			,							lowercase_			,							lowercase_   )


				def     A_					(						self       :   Optional[Any]			,							lowercase_       :   Tuple			,							lowercase_       :   Optional[int]   ):
									return self._query_range(self.root			,							lowercase_			,							lowercase_   )


				def     A_					(						self       :   str			,							lowercase_       :   int			,							lowercase_       :   int   ):
									if start == end:
														return SegmentTreeNode(lowercase_			,							lowercase_			,							self.collection[start]   )
									snake_case_		     =							(start + end) // 2
									snake_case_		     =							self._build_tree(lowercase_			,							lowercase_   )
									snake_case_		     =							self._build_tree(mid + 1			,							lowercase_   )
									return SegmentTreeNode(lowercase_			,							lowercase_			,							self.fn(left.val			,							right.val   )			,							lowercase_			,							lowercase_   )


				def     A_					(						self       :   Optional[int]			,							lowercase_       :   int			,							lowercase_       :   Optional[Any]			,							lowercase_       :   List[str]   ):
									if node.start == i and node.end == i:
														snake_case_		     =							val
														return
									if i <= node.mid:
														self._update_tree(node.left			,							lowercase_			,							lowercase_   )
									else:
														self._update_tree(node.right			,							lowercase_			,							lowercase_   )
									snake_case_		     =							self.fn(node.left.val			,							node.right.val   )


				def     A_					(						self       :   Tuple			,							lowercase_       :   List[Any]			,							lowercase_       :   List[Any]			,							lowercase_       :   Any   ):
									if node.start == i and node.end == j:
														return node.val

									if i <= node.mid:
														if j <= node.mid:
																			# range in left child tree
																			return self._query_range(node.left			,							lowercase_			,							lowercase_   )
														else:
																			# range in left child tree and right child tree
																			return self.fn(
																			    self._query_range(node.left			,							lowercase_			,							node.mid   )			,							self._query_range(node.right			,							node.mid + 1			,							lowercase_   )			,							)
									else:
														# range in right child tree
														return self._query_range(node.right			,							lowercase_			,							lowercase_   )


				def     A_					(						self       :   Any   ):
									if self.root is not None:
														snake_case_		     =							Queue()
														queue.put(self.root   )
														while not queue.empty():
																			snake_case_		     =							queue.get()
																			yield node

																			if node.left is not None:
																								queue.put(node.left   )

																			if node.right is not None:
																								queue.put(node.right   )


if __name__ == "__main__":
							import operator

							for fn in [operator.add, max, min]:
														print('*' * 50)
														a    :							List[Any]										=    SegmentTree([2, 1, 5, 3, 4], fn)
														for node in arr.traverse():
																					print(node)
														print()

														arr.update(1, 5)
														for node in arr.traverse():
																					print(node)
														print()

														print(arr.query_range(3, 4))  # 7
														print(arr.query_range(2, 2))  # 5
														print(arr.query_range(1, 3))  # 13
														print()

