

def 							__SCREAMING_SNAKE_CASE     (   a__    :   str       )					->				list:
	__A :			int		    =			[0] * len(a__       )

	for i in range(1			,len(a__       )       ):
		# use last results for better performance - dynamic programming
		__A :			List[Any]		    =			prefix_result[i - 1]
		while j > 0 and input_string[i] != input_string[j]:
			__A :			str		    =			prefix_result[j - 1]

		if input_string[i] == input_string[j]:
			j += 1
		__A :			Union[str, Any]		    =			j

	return prefix_result
def 							__SCREAMING_SNAKE_CASE     (   a__    :   str       )					->				int:
	return max(prefix_function(a__       )       )


if __name__ == "__main__":
			import doctest

			doctest.testmod()






'''simple docstring'''







def    lowerCamelCase       (			UpperCAmelCase__				:  int		)			->	int:


							'''simple docstring'''






							assert (
							    isinstance(UpperCAmelCase__				,						UpperCAmelCase__		) and number_of_steps > 0
							), F'''number_of_steps needs to be positive integer, your input {number_of_steps}'''
							if number_of_steps == 1:
														return 1
							SCREAMING_SNAKE_CASE__    ,      SCREAMING_SNAKE_CASE__     :Dict						    = 1, 1
							for _ in range(number_of_steps - 1		):
														SCREAMING_SNAKE_CASE__    ,      SCREAMING_SNAKE_CASE__     :Union[str, Any]						    = current + previous, current
							return current


if __name__ == "__main__":
		import doctest

		doctest.testmod()






