"""simple docstring"""







from __future__ import annotations



class  _lowerCamelCase			:







							def __init__( self    :       Optional[int]			,					lowerCamelCase_    :       int						):

								"""simple docstring"""






								_lowercase :    Optional[Any]							=							data
								_lowercase :    Union[str, Any]							=							None
								_lowercase :    Union[str, Any]							=							None



def      __lowerCAmelCase(		__UpperCAmelCase			):  # In Order traversal of the tree






	"""simple docstring"""





	if tree:
		display(tree.left			)
		print(tree.data			)
		display(tree.right			)


def      __lowerCAmelCase(		__UpperCAmelCase			):






	"""simple docstring"""





	return 1 + max(depth_of_tree(tree.left			)     ,depth_of_tree(tree.right			)			) if tree else 0


def      __lowerCAmelCase(		__UpperCAmelCase			):






	"""simple docstring"""





	if not tree:
		return True
	if tree.left and tree.right:
		return is_full_binary_tree(tree.left			) and is_full_binary_tree(tree.right			)
	else:
		return not tree.left and not tree.right


def      __lowerCAmelCase(		):  # Main function for testing.






	"""simple docstring"""





	_lowercase :    Union[str, Any]							=							Node(1			)
	_lowercase :    str							=							Node(2			)
	_lowercase :    Optional[Any]							=							Node(3			)
	_lowercase :    int							=							Node(4			)
	_lowercase :    str							=							Node(5			)
	_lowercase :    List[str]							=							Node(6			)
	_lowercase :    List[str]							=							Node(7			)
	_lowercase :    str							=							Node(8			)
	_lowercase :    List[str]							=							Node(9			)

	print(is_full_binary_tree(A__			)			)
	print(depth_of_tree(A__			)			)
	print('Tree is: '			)
	display(A__			)


if __name__ == "__main__":
						main()




"""simple docstring"""







import functools


def      __lowerCAmelCase(		__UpperCAmelCase     ,__UpperCAmelCase			):






	"""simple docstring"""





	if not isinstance(__UpperCAmelCase     ,__UpperCAmelCase			) or not all(isinstance(__UpperCAmelCase     ,__UpperCAmelCase			) for day in days			):
		raise ValueError('The parameter days should be a list of integers'			)

	if len(__UpperCAmelCase			) != 3 or not all(isinstance(__UpperCAmelCase     ,__UpperCAmelCase			) for cost in costs			):
		raise ValueError('The parameter costs should be a list of three integers'			)

	if len(__UpperCAmelCase			) == 0:
		return 0

	if min(__UpperCAmelCase			) <= 0:
		raise ValueError('All days elements should be greater than 0'			)

	if max(__UpperCAmelCase			) >= 366:
		raise ValueError('All days elements should be less than 366'			)

	_lowercase :    List[Any]							=							set(__UpperCAmelCase			)

	@functools.cache
	def dynamic_programming(__UpperCAmelCase			) -> int:
		if index > 365:
			return 0

		if index not in days_set:
			return dynamic_programming(index + 1			)

		return min(
		    costs[0] + dynamic_programming(index + 1			)     ,costs[1] + dynamic_programming(index + 7			)     ,costs[2] + dynamic_programming(index + 30			)     ,)

	return dynamic_programming(1			)


if __name__ == "__main__":
						import doctest

						doctest.testmod()



