


'''simple docstring'''



from math import asin, atan, cos, radians, sin, sqrt, tan

__A		=6_3_7_8_1_3_7.0
__A		=6_3_5_6_7_5_2.3_1_4_2_4_5
__A		=6_37_81_37







def       _UpperCamelCase (						UpperCamelCase__	, UpperCamelCase__	, UpperCamelCase__	, UpperCamelCase__   ):
			UpperCAmelCase__					:   List[str]       				=       (AXIS_A - AXIS_B) / AXIS_A
			UpperCAmelCase__					:   List[Any]       				=       atan((1 - flattening) * tan(radians(UpperCamelCase__   )   )   )
			UpperCAmelCase__					:   str       				=       atan((1 - flattening) * tan(radians(UpperCamelCase__   )   )   )
			UpperCAmelCase__					:   List[str]       				=       radians(UpperCamelCase__   )
			UpperCAmelCase__					:   List[Any]       				=       radians(UpperCamelCase__   )
			# Equation
			UpperCAmelCase__					:   List[str]       				=       sin((phi_a - phi_a) / 2   )
			UpperCAmelCase__					:   Union[str, Any]       				=       sin((lambda_a - lambda_a) / 2   )
			# Square both values
			sin_sq_phi *= sin_sq_phi
			sin_sq_lambda *= sin_sq_lambda
			UpperCAmelCase__					:   List[str]       				=       sqrt(sin_sq_phi + (cos(UpperCamelCase__   ) * cos(UpperCamelCase__   ) * sin_sq_lambda)   )
			return 2 * RADIUS * asin(UpperCamelCase__   )


if __name__ == "__main__":
		import doctest

		doctest.testmod()



'''simple docstring'''



import functools







def       _UpperCamelCase (						UpperCamelCase__	, UpperCamelCase__   ):

			# Validation
			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__   ) >= 3_6_6:
						raise ValueError("""All days elements should be less than 366"""   )

			UpperCAmelCase__					:   Union[str, Any]       				=       set(UpperCamelCase__   )

			@functools.cache
			def dynamic_programming(UpperCamelCase__   ) -> int:
						if index > 3_6_5:
									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 + 3_0   )	, )

			return dynamic_programming(1   )


if __name__ == "__main__":
		import doctest

		doctest.testmod()