


"""simple docstring"""
__SCREAMING_SNAKE_CASE							:    Union[str, Any]		=    [sum(int(c, 10) ** 2 for c in i.__str__()) for i in range(100_000)]







def 						_a				(      _SCREAMING_SNAKE_CASE				)    ->				int:
							snake_case_           =		0
							while number:
														# Increased Speed Slightly by checking every 5 digits together.
														sum_of_digits_squared += DIGITS_SQUARED[number % 100_000]
														number //= 100_000

							return sum_of_digits_squared


# There are 2 Chains made,
# One ends with 89 with the chain member 58 being the one which when declared first,
# there will be the least number of iterations for all the members to be checked.

# The other one ends with 1 and has only one element 1.

# So 58 and 1 are chosen to be declared at the starting.

# Changed dictionary to an array to quicken the solution
__SCREAMING_SNAKE_CASE							:    list[bool | None]		=    [None] * 10_000_000
__SCREAMING_SNAKE_CASE							:    Optional[Any]		=    True
__SCREAMING_SNAKE_CASE							:    Optional[Any]		=    False







def 						_a				(      _SCREAMING_SNAKE_CASE				)    ->				bool:

							if CHAINS[number - 1] is not None:
														return CHAINS[number - 1]  # type: ignore

							snake_case_           =		chain(next_number(_SCREAMING_SNAKE_CASE				)				)
							snake_case_           =		number_chain

							while number < 10_000_000:
														snake_case_           =		number_chain
														number *= 10

							return number_chain







def 						_a				(      _SCREAMING_SNAKE_CASE = 10_000_000				)    ->				int:
							for i in range(1				, _SCREAMING_SNAKE_CASE				):
														if CHAINS[i] is None:
																					chain(i + 1				)

							return CHAINS[:number].count(_SCREAMING_SNAKE_CASE				)


if __name__ == "__main__":
				import doctest

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







"""simple docstring"""
from functools import reduce

__SCREAMING_SNAKE_CASE							:    Tuple		=    (
    '73167176531330624919225119674426574742355349194934'
    '96983520312774506326239578318016984801869478851843'
    '85861560789112949495459501737958331952853208805511'
    '12540698747158523863050715693290963295227443043557'
    '66896648950445244523161731856403098711121722383113'
    '62229893423380308135336276614282806444486645238749'
    '30358907296290491560440772390713810515859307960866'
    '70172427121883998797908792274921901699720888093776'
    '65727333001053367881220235421809751254540594752243'
    '52584907711670556013604839586446706324415722155397'
    '53697817977846174064955149290862569321978468622482'
    '83972241375657056057490261407972968652414535100474'
    '82166370484403199890008895243450658541227588666881'
    '16427171479924442928230863465674813919123162824586'
    '17866458359124566529476545682848912883142607690042'
    '24219022671055626321111109370544217506941658960408'
    '07198403850962455444362981230987879927244284909188'
    '84580156166097919133875499200524063689912560717606'
    '05886116467109405077541002256983155200055935729725'
    '71636269561882670428252483600823257530420752963450'
)







def 						_a				(      _SCREAMING_SNAKE_CASE = N				)    ->				int:
							return max(
							    # mypy cannot properly interpret reduce
							    int(reduce(lambda _SCREAMING_SNAKE_CASE				, _SCREAMING_SNAKE_CASE				: str(int(_SCREAMING_SNAKE_CASE				) * int(_SCREAMING_SNAKE_CASE				)				)				, n[i : i + 13]				)				)
							    for i in range(len(_SCREAMING_SNAKE_CASE				) - 12				)				)


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



