






'''simple docstring'''






def        _SCREAMING_SNAKE_CASE  (				A  :       int  )    -> str:







   """simple docstring"""

   if isinstance(A  ,		A  ):
      raise TypeError('\'float\' object cannot be interpreted as an integer'  )
   if isinstance(A  ,		A  ):
      raise TypeError('\'str\' object cannot be interpreted as an integer'  )

   if num == 0:
      return "0b0"

   __snake_case				:      Optional[int]     							= False

   if num < 0:
      __snake_case				:      Optional[Any]     							= True
      __snake_case				:      List[Any]     							= -num

   __snake_case				:      list[int]     							= []
   while num > 0:
      binary.insert(0  ,		num % 2  )
      num >>= 1

   if negative:
      return "-0b" + "".join(str(A  ) for e in binary  )

   return "0b" + "".join(str(A  ) for e in binary  )


if __name__ == "__main__":
      import doctest

      doctest.testmod()







'''simple docstring'''






from functools import lru_cache




@lru_cache
def        _SCREAMING_SNAKE_CASE  (				A  :       int  )    -> int:







   """simple docstring"""
   if num < 0:
      raise ValueError('Number should not be negative.'  )

   return 1 if num in (0, 1) else num * factorial(num - 1  )


if __name__ == "__main__":
      import doctest

      doctest.testmod()