


"""simple docstring"""







def      UpperCAmelCase__ (lowerCAmelCase_ = 6008_5147_5143     ):


					try:
										__SCREAMING_SNAKE_CASE		     =       int(__lowerCAmelCase     )
					except (TypeError, ValueError):
										raise TypeError("Parameter n must be int or castable to int."     )
					if n <= 0:
										raise ValueError("Parameter n must be greater than or equal to one."     )
					__SCREAMING_SNAKE_CASE		     =       1
					__SCREAMING_SNAKE_CASE		     =       2
					while i * i <= n:
										while n % i == 0:
															__SCREAMING_SNAKE_CASE		     =       i
															n //= i
										i += 1
					if n > 1:
										__SCREAMING_SNAKE_CASE		     =       n
					return int(__lowerCAmelCase     )


if __name__ == "__main__":
		print(F"{solution() = }")




"""simple docstring"""







import functools




def      UpperCAmelCase__ (lowerCAmelCase_						,		lowerCAmelCase_     ):




					'''simple docstring'''


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

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

					if len(lowerCAmelCase_     ) == 0:
										return 0

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

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

					__SCREAMING_SNAKE_CASE		     =       set(lowerCAmelCase_     )

					@functools.cache
					def dynamic_programming(lowerCAmelCase_     ) -> 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()
