



"""simple docstring"""




import abc
import copy
import dataclasses
from dataclasses import dataclass
from typing import ClassVar, Dict, Type, TypeVar

from ..features import Features


_lowerCAmelCase       :      Optional[Any]							=							TypeVar("T", bound="TaskTemplate")






@dataclass(frozen=UpperCamelCase_		)
class 			UpperCAmelCase_						(       abc.ABC		):
      # `task` is not a ClassVar since we want it to be part of the `asdict` output for JSON serialization
      __SCREAMING_SNAKE_CASE		:     Tuple				  =				4_2
      __SCREAMING_SNAKE_CASE		:     str				  =				4_2
      __SCREAMING_SNAKE_CASE		:     Any				  =				4_2



      def 		snake_case_      (  self  :			Tuple  ,			A  :			int		):
           return copy.deepcopy(self		)



      @property
      def 		snake_case_      (  self  :			Union[str, Any]		):
           return Features(**self.input_schema  ,			**self.label_schema		)



      @property
      @abc.abstractmethod
      def 		snake_case_      (  self  :			str		):
           raise NotImplementedError



      @classmethod
      def 		snake_case_      (  cls  :			Optional[int]  ,			A  :			Tuple		):
           _UpperCAmelCase    :			int              =					{f.name for f in dataclasses.fields(cls		)}
           return cls(**{k: v for k, v in template_dict.items() if k in field_names}		)





"""simple docstring"""




_lowerCAmelCase       :      str							=							{
    "0": 1,
    "1": 1,
    "2": 2,
    "3": 6,
    "4": 24,
    "5": 1_20,
    "6": 7_20,
    "7": 50_40,
    "8": 4_03_20,
    "9": 36_28_80,
}

_lowerCAmelCase       :      Optional[int]							=							{1_45: 1_45}

_lowerCAmelCase       :      int							=							{
    1_45: 0,
    1_69: 3,
    3_63_01: 3,
    14_54: 3,
    8_71: 2,
    4_53_61: 2,
    8_72: 2,
}

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int       )						->     int:





     '''simple docstring'''

     if n in CACHE_SUM_DIGIT_FACTORIALS:
          return CACHE_SUM_DIGIT_FACTORIALS[n]
     _UpperCAmelCase    :			Dict              =					sum(DIGIT_FACTORIALS[let] for let in str(SCREAMING_SNAKE_CASE__       )       )
     _UpperCAmelCase    :			Any              =					ret
     return ret

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int		,						SCREAMING_SNAKE_CASE__			:		set | None = None       )						->     int:





     '''simple docstring'''

     _UpperCAmelCase    :			Dict              =					previous or set()
     if n in CHAIN_LENGTH_CACHE:
          return CHAIN_LENGTH_CACHE[n]
     _UpperCAmelCase    :			Dict              =					sum_digit_factorials(SCREAMING_SNAKE_CASE__       )
     if next_number in previous:
          _UpperCAmelCase    :			List[str]              =					0
          return 0
     else:
          previous.add(SCREAMING_SNAKE_CASE__       )
          _UpperCAmelCase    :			str              =					1 + chain_length(SCREAMING_SNAKE_CASE__		,						SCREAMING_SNAKE_CASE__       )
          _UpperCAmelCase    :			str              =					ret
          return ret

def 		__snake_case		(   SCREAMING_SNAKE_CASE__			:		int = 60		,						SCREAMING_SNAKE_CASE__			:		int = 1_000_000       )						->     int:





     '''simple docstring'''

     return sum(1 for i in range(1		,						SCREAMING_SNAKE_CASE__       ) if chain_length(SCREAMING_SNAKE_CASE__       ) == num_terms       )


if __name__ == "__main__":
 print(F"{solution() = }")
