


from math import factorial

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




def  a   (lowerCAmelCase__   ):
   if not isinstance(lowerCAmelCase__		,				lowerCAmelCase__   ):
      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(lowerCAmelCase__   )   )




def  a   (lowerCAmelCase__ = 60		,				lowerCAmelCase__ = 1_000_000   ):

   if not isinstance(lowerCAmelCase__		,				lowerCAmelCase__   ) or not isinstance(lowerCAmelCase__		,				lowerCAmelCase__   ):
      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		,				lowerCAmelCase__   ):
      # 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(lowerCAmelCase__   )
         chain_set_length += 1
         __a					=  digit_factorial_sum(lowerCAmelCase__   )

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







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tf_available, is_torch_available


SCREAMING_SNAKE_CASE							    =							{
    'configuration_tapas': ['TAPAS_PRETRAINED_CONFIG_ARCHIVE_MAP', 'TapasConfig'],
    'tokenization_tapas': ['TapasTokenizer'],
}

try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  SCREAMING_SNAKE_CASE							    =							[
      'TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST',
      'TapasForMaskedLM',
      'TapasForQuestionAnswering',
      'TapasForSequenceClassification',
      'TapasModel',
      'TapasPreTrainedModel',
      'load_tf_weights_in_tapas',
  ]
try:
  if not is_tf_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  SCREAMING_SNAKE_CASE							    =							[
      'TF_TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST',
      'TFTapasForMaskedLM',
      'TFTapasForQuestionAnswering',
      'TFTapasForSequenceClassification',
      'TFTapasModel',
      'TFTapasPreTrainedModel',
  ]


if TYPE_CHECKING:
  from .configuration_tapas import TAPAS_PRETRAINED_CONFIG_ARCHIVE_MAP, TapasConfig
  from .tokenization_tapas import TapasTokenizer

  try:
    if not is_torch_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_tapas import (
        TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST,
        TapasForMaskedLM,
        TapasForQuestionAnswering,
        TapasForSequenceClassification,
        TapasModel,
        TapasPreTrainedModel,
        load_tf_weights_in_tapas,
    )

  try:
    if not is_tf_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_tf_tapas import (
        TF_TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST,
        TFTapasForMaskedLM,
        TFTapasForQuestionAnswering,
        TFTapasForSequenceClassification,
        TFTapasModel,
        TFTapasPreTrainedModel,
    )


else:
  import sys

  SCREAMING_SNAKE_CASE							    =							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)



