


'''simple docstring'''






from math import factorial

__UpperCAmelCase					       =							{str(digit): factorial(digit) for digit in range(10)}


def       _snake_case     (  A )		->					int:
							if not isinstance(A				,					A ):
														raise TypeError('''Parameter number must be int''' )

							if number < 0:
														raise ValueError('''Parameter number must be greater than or equal to 0''' )

							# Converts number in string to iterate on its digits and adds its factorial.
							return sum(DIGIT_FACTORIAL[digit] for digit in str(A ) )


def       _snake_case     (  A = 60				,					A = 1000000 )		->					int:

							if not isinstance(A				,					A ) or not isinstance(A				,					A ):
														raise TypeError('''Parameters chain_length and number_limit must be int''' )

							if chain_length <= 0 or number_limit <= 0:
														raise ValueError(
														    '''Parameters chain_length and number_limit must be greater than 0''' )

							# the counter for the chains with the exact desired length
							lowerCAmelCase__      =			0
							# the cached sizes of the previous chains
							lowerCAmelCase__      =			{}

							for start_chain_element in range(1				,					A ):
														# The temporary set will contain the elements of the chain
														lowerCAmelCase__      =			set()
														lowerCAmelCase__      =			0

														# Stop computing the chain when you find a cached size, a repeating item or the
														# length is greater then the desired one.
														lowerCAmelCase__      =			start_chain_element
														while (
														    chain_element not in chain_sets_lengths
														    and chain_element not in chain_set
														    and chain_set_length <= chain_length
														):
																					chain_set.add(A )
																					chain_set_length += 1
																					lowerCAmelCase__      =			digit_factorial_sum(A )

														if chain_element in chain_sets_lengths:
																					chain_set_length += chain_sets_lengths[chain_element]

														lowerCAmelCase__      =			chain_set_length

														# If chain contains the exact amount of elements increase the counter
														if chain_set_length == chain_length:
																					chains_counter += 1

							return chains_counter


if __name__ == "__main__":
		import doctest

		doctest.testmod()
		print(f"""{solution()}""")



'''simple docstring'''






def       _snake_case     (  A )		->					int:
							return 1 if digit in (0, 1) else (digit * factorial(digit - 1 ))


def       _snake_case     (  A )		->					bool:
							lowerCAmelCase__      =			0
							lowerCAmelCase__      =			number
							while duplicate > 0:
														lowerCAmelCase__     ,      lowerCAmelCase__      =			divmod(A				,					10 )
														fact_sum += factorial(A )
							return fact_sum == number


if __name__ == "__main__":
		print('''Program to check whether a number is a Krisnamurthy Number or not.''')
		__UpperCAmelCase					       =							int(input('''Enter number: ''').strip())
		print(
		    f"""{number} is {'' if krishnamurthy(number) else 'not '}a Krishnamurthy Number."""
		)