

"""simple docstring"""


import os

# Precomputes a list of the 100 first triangular numbers
__A						       =      [int(0.5 * n * (n + 1)) for n in range(1, 101)]






def    a__   (   )     ->     Tuple:
		__lowerCAmelCase:	Union[str, Any]   				=      os.path.dirname(os.path.realpath(__SCREAMING_SNAKE_CASE			)			)
		__lowerCAmelCase:	Dict   				=      os.path.join(__SCREAMING_SNAKE_CASE ,			"words.txt"			)

		__lowerCAmelCase:	List[Any]   				=      ""
		with open(__SCREAMING_SNAKE_CASE			) as f:
				__lowerCAmelCase:	Optional[int]   				=      f.readline()

		__lowerCAmelCase:	Any   				=      [word.strip("\""			) for word in words.strip("\r\n"			).split(","			)]
		__lowerCAmelCase:	List[Any]   				=      [
		    word
		    for word in [sum(ord(__SCREAMING_SNAKE_CASE			) - 6_4 for x in word			) for word in words]
		    if word in TRIANGULAR_NUMBERS
		]
		return len(__SCREAMING_SNAKE_CASE			)


if __name__ == "__main__":
			print(solution())





"""simple docstring"""


import math
import sys






def    a__   (   __SCREAMING_SNAKE_CASE			)     ->     int:
		if number != int(__SCREAMING_SNAKE_CASE			):
				raise ValueError("the value of input must be a natural number"			)
		if number < 0:
				raise ValueError("the value of input must not be a negative number"			)
		if number == 0:
				return 1
		__lowerCAmelCase:	int   				=      [-1] * (number + 1)
		__lowerCAmelCase:	Optional[Any]   				=      0
		for i in range(1 ,			number + 1			):
				__lowerCAmelCase:	List[str]   				=      sys.maxsize
				__lowerCAmelCase:	int   				=      int(math.sqrt(__SCREAMING_SNAKE_CASE			)			)
				for j in range(1 ,			root + 1			):
						__lowerCAmelCase:	Optional[Any]   				=      1 + answers[i - (j**2)]
						__lowerCAmelCase:	List[Any]   				=      min(__SCREAMING_SNAKE_CASE ,			__SCREAMING_SNAKE_CASE			)
				__lowerCAmelCase:	Optional[Any]   				=      answer
		return answers[number]


if __name__ == "__main__":
			import doctest

			doctest.testmod()


