


from math import factorial

UpperCAmelCase__   	=							{str(digit): factorial(digit) for digit in range(10)}
def 				UpperCAmelCase_					(							__snake_case						)     ->			int:







 """simple docstring"""


 if not isinstance(__snake_case     ,						__snake_case						):
  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(__snake_case						)						)
def 				UpperCAmelCase_					(							__snake_case = 60     ,						__snake_case = 1000000						)     ->			int:







 """simple docstring"""


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

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

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

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

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





UpperCAmelCase__   	=							8.31_44_62  # Unit - J mol-1 K-1
def 				UpperCAmelCase_					(							__snake_case     ,						__snake_case     ,						__snake_case						)     ->			float:







 """simple docstring"""


 if moles < 0 or kelvin < 0 or volume < 0:
  raise ValueError('''Invalid inputs. Enter positive value.'''						)
 return moles * kelvin * UNIVERSAL_GAS_CONSTANT / volume
def 				UpperCAmelCase_					(							__snake_case     ,						__snake_case     ,						__snake_case						)     ->			float:







 """simple docstring"""


 if moles < 0 or kelvin < 0 or pressure < 0:
  raise ValueError('''Invalid inputs. Enter positive value.'''						)
 return moles * kelvin * UNIVERSAL_GAS_CONSTANT / pressure


if __name__ == "__main__":
  from doctest import testmod

  testmod()

