






"""simple docstring"""







import unittest
from timeit import timeit

def _a (		_snake_case      ,       _snake_case							):







      """simple docstring"""






      UpperCAmelCase							=       first_num if first_num >= second_num else second_num
      UpperCAmelCase							=       max_num
      while (common_mult % first_num > 0) or (common_mult % second_num > 0):
            common_mult += max_num
      return common_mult

def _a (		_snake_case      ,       _snake_case							):







      """simple docstring"""






      return b if a == 0 else greatest_common_divisor(b % a      ,       _lowerCamelCase							)

def _a (		_snake_case      ,       _snake_case							):







      """simple docstring"""






      return first_num // greatest_common_divisor(_lowerCamelCase      ,       _lowerCamelCase							) * second_num

def _a (		):







      """simple docstring"""






      UpperCAmelCase							=       (
          'from __main__ import least_common_multiple_slow, least_common_multiple_fast'
      )
      print(
          """least_common_multiple_slow():"""      ,       timeit("""least_common_multiple_slow(1000, 999)"""      ,       setup=_lowerCamelCase							)      ,       )
      print(
          """least_common_multiple_fast():"""      ,       timeit("""least_common_multiple_fast(1000, 999)"""      ,       setup=_lowerCamelCase							)      ,       )







class 					lowerCamelCase__					(       unittest.TestCase ):
    SCREAMING_SNAKE_CASE		=			(
        (10, 20),
        (13, 15),
        (4, 31),
        (10, 42),
        (43, 34),
        (5, 12),
        (12, 25),
        (10, 25),
        (6, 9),
    )
    SCREAMING_SNAKE_CASE		=			(20, 195, 124, 210, 1_462, 60, 300, 50, 18)






    def 				_UpperCamelCase							( self					):



          for i, (first_num, second_num) in enumerate(self.test_inputs					):
                UpperCAmelCase							=       least_common_multiple_slow(lowerCamelCase_	,lowerCamelCase_					)
                UpperCAmelCase							=       least_common_multiple_fast(lowerCamelCase_	,lowerCamelCase_					)
                with self.subTest(i=lowerCamelCase_					):
                      self.assertEqual(lowerCamelCase_	,self.expected_results[i]					)
                      self.assertEqual(lowerCamelCase_	,self.expected_results[i]					)


if __name__ == "__main__":
  benchmark()
  unittest.main()











"""simple docstring"""
class 		a_      :







      '''simple docstring'''

      class 		a_      :







            '''simple docstring'''

            lowerCamelCase__       :				List[Any] =	'_prev', '_data', '_next'




            def __init__(self,     lowerCamelCase_,     lowerCamelCase_,     lowerCamelCase_					):

             '''simple docstring'''



             lowerCamelCase__     :			Optional[int]     				=						link_p
             lowerCamelCase__     :			Optional[Any]     				=						element
             lowerCamelCase__     :			List[Any]     				=						link_n





            def 			a__							(self					):

             '''simple docstring'''



             return (
                 f''' Prev -> {self._prev is not None}, Next -> {self._next is not None}'''
             )




      def __init__(self					):

       '''simple docstring'''



       lowerCamelCase__     :			Any     				=						self._Node(lowerCamelCase_,     lowerCamelCase_,     lowerCamelCase_					)
       lowerCamelCase__     :			Dict     				=						self._Node(lowerCamelCase_,     lowerCamelCase_,     lowerCamelCase_					)
       lowerCamelCase__     :			List[str]     				=						self._trailer
       lowerCamelCase__     :			Union[str, Any]     				=						self._header
       lowerCamelCase__     :			Any     				=						0




      def __len__(self					):

       '''simple docstring'''



       return self._size




      def 			a__							(self					):

       '''simple docstring'''



       return self.__len__() == 0




      def 			a__							(self,     lowerCamelCase_,     lowerCamelCase_,     lowerCamelCase_					):

       '''simple docstring'''



       lowerCamelCase__     :			int     				=						self._Node(lowerCamelCase_,     lowerCamelCase_,     lowerCamelCase_					)
       lowerCamelCase__     :			Optional[int]     				=						new_node
       lowerCamelCase__     :			List[Any]     				=						new_node
       self._size += 1
       return self





      def 			a__							(self,     lowerCamelCase_					):

       '''simple docstring'''



       lowerCamelCase__     :			Optional[Any]     				=						node._prev
       lowerCamelCase__     :			List[str]     				=						node._next

       lowerCamelCase__     :			Tuple     				=						successor
       lowerCamelCase__     :			Tuple     				=						predecessor
       self._size -= 1
       lowerCamelCase__     :			int     				=						node._data
       lowerCamelCase__     :			Dict     				=						None
       del node
       return temp



class 		a_      (	_DoublyLinkedBase ):







      '''simple docstring'''

      def 			a__							(self					):

       '''simple docstring'''



       if self.is_empty():
        raise Exception('List is empty'					)
       return self._header._next._data




      def 			a__							(self					):

       '''simple docstring'''



       if self.is_empty():
        raise Exception('List is empty'					)
       return self._trailer._prev._data




      def 			a__							(self,     lowerCamelCase_					):

       '''simple docstring'''



       return self._insert(self._header,     lowerCamelCase_,     self._header._next					)




      def 			a__							(self,     lowerCamelCase_					):

       '''simple docstring'''



       return self._insert(self._trailer._prev,     lowerCamelCase_,     self._trailer					)




      def 			a__							(self					):

       '''simple docstring'''



       if self.is_empty():
        raise IndexError('remove_first from empty list'					)
       return self._delete(self._header._next					)





      def 			a__							(self					):

       '''simple docstring'''



       if self.is_empty():
        raise IndexError('remove_first from empty list'					)
       return self._delete(self._trailer._prev					)

