



from math import factorial

SCREAMING_SNAKE_CASE__       =      {str(digit): factorial(digit) for digit in range(1_0)}


def A						(       __UpperCamelCase					)						->      int:
			if not isinstance(__UpperCamelCase ,	__UpperCamelCase					):
						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(__UpperCamelCase					)					)


def A						(       __UpperCamelCase = 60 ,	__UpperCamelCase = 1_000_000					)						->      int:

			if not isinstance(__UpperCamelCase ,	__UpperCamelCase					) or not isinstance(__UpperCamelCase ,	__UpperCamelCase					):
						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
			A__       =    0
			# the cached sizes of the previous chains
			A__       =    {}

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

						# Stop computing the chain when you find a cached size, a repeating item or the
						# length is greater then the desired one.
						A__       =    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(__UpperCamelCase					)
									chain_set_length += 1
									A__       =    digit_factorial_sum(__UpperCamelCase					)

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

						A__       =    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()}')









def A						(       __UpperCamelCase					)						->      bool:
			return number & 1 == 0


if __name__ == "__main__":
							import doctest

							doctest.testmod()




