


'''simple docstring'''



from timeit import timeit

__A	={
    'MALAYALAM': True,
    'String': False,
    'rotor': True,
    'level': True,
    'A': True,
    'BB': True,
    'ABC': False,
    'amanaplanacanalpanama': True,  # "a man a plan a canal panama"
}
# Ensure our test data is valid
assert all((key == key[::-1]) is value for key, value in test_data.items())







def     _UpperCamelCase      (		UpperCamelCase__					):
			UpperCAmelCase__  :					Dict        =     0
			UpperCAmelCase__  :					Optional[int]        =     len(UpperCamelCase__					) - 1
			while start_i < end_i:
						if s[start_i] == s[end_i]:
									start_i += 1
									end_i -= 1
						else:
									return False
			return True







def     _UpperCamelCase      (		UpperCamelCase__					):
			UpperCAmelCase__  :					Optional[Any]        =     len(UpperCamelCase__					) // 2
			UpperCAmelCase__  :					Dict        =     len(UpperCamelCase__					)

			# We need to traverse till half of the length of string
			# as we can get access of the i'th last element from
			# i'th index.
			# eg: [0,1,2,3,4,5] => 4th index can be accessed
			# with the help of 1st index (i==n-i-1)
			# where n is length of string
			return all(s[i] == s[n - i - 1] for i in range(UpperCamelCase__					)					)







def     _UpperCamelCase      (		UpperCamelCase__					):
			if len(UpperCamelCase__					) <= 2:
						return True
			if s[0] == s[len(UpperCamelCase__					) - 1]:
						return is_palindrome_recursive(s[1:-1]					)
			else:
						return False







def     _UpperCamelCase      (		UpperCamelCase__					):
			return s == s[::-1]







def     _UpperCamelCase      (		UpperCamelCase__					):
			UpperCAmelCase__  :					List[Any]        =     f'''all({name}(key) is value for key, value in test_data.items())'''
			UpperCAmelCase__  :					int        =     f'''from __main__ import test_data, {name}'''
			UpperCAmelCase__  :					List[Any]        =     5_0_0_0_0_0
			UpperCAmelCase__  :					str        =     timeit(stmt=UpperCamelCase__ ,      setup=UpperCamelCase__ ,      number=UpperCamelCase__					)
			print(f'''{name:<35} finished {number:,} runs in {result:.5f} seconds'''					)


if __name__ == "__main__":
		for key, value in test_data.items():
				assert is_palindrome(key) is is_palindrome_recursive(key)
				assert is_palindrome(key) is is_palindrome_slice(key)
				print(f"""{key:21} {value}""")
		print('a man a plan a canal panama')

		# finished 500,000 runs in 0.46793 seconds
		benchmark_function('is_palindrome_slice')
		# finished 500,000 runs in 0.85234 seconds
		benchmark_function('is_palindrome')
		# finished 500,000 runs in 1.32028 seconds
		benchmark_function('is_palindrome_recursive')
		# finished 500,000 runs in 2.08679 seconds
		benchmark_function('is_palindrome_traversal')



'''simple docstring'''



def     _UpperCamelCase      (		UpperCamelCase__ ,      UpperCamelCase__ ,      UpperCamelCase__ ,      UpperCamelCase__					):
			if height >= 1:
						move_tower(height - 1 ,      UpperCamelCase__ ,      UpperCamelCase__ ,      UpperCamelCase__					)
						move_disk(UpperCamelCase__ ,      UpperCamelCase__					)
						move_tower(height - 1 ,      UpperCamelCase__ ,      UpperCamelCase__ ,      UpperCamelCase__					)







def     _UpperCamelCase      (		UpperCamelCase__ ,      UpperCamelCase__					):
			print("""moving disk from""" ,      UpperCamelCase__ ,      """to""" ,      UpperCamelCase__					)







def     _UpperCamelCase      (		):
			UpperCAmelCase__  :					List[str]        =     int(input("""Height of hanoi: """					).strip()					)
			move_tower(UpperCamelCase__ ,      """A""" ,      """B""" ,      """C"""					)


if __name__ == "__main__":
		main()