

import warnings
from functools import wraps
from typing import Callable

def 		UpperCamelCase      (lowercase_:				int      )  ->   int:






 @wraps(a__      )
 def _inner_fn(*lowercase_:				Optional[int]					,   **lowercase_:				Tuple      ):
  warnings.warn(
      (f"""\'{fn.__name__}\' is experimental and might be subject to breaking changes in the future.""")					,   a__					,   )
  return fn(*a__					,   **a__      )

 return _inner_fn






from functools import lru_cache

@lru_cache
def 		UpperCamelCase      (lowercase_:				int      )  ->   int:
	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()



