def _lowerCamelCase  (		snake_case     , snake_case     , snake_case  ):
							return not any(
							    neighbour == 1 and colored_vertices[i] == color
							    for i, neighbour in enumerate(snake_case  )  )






def _lowerCamelCase  (		snake_case     , snake_case     , snake_case     , snake_case  ):

							# Base Case
							if index == len(snake_case  ):
														return True

							# Recursive Step
							for i in range(snake_case  ):
														if valid_coloring(graph[index]     , snake_case     , snake_case  ):
																					# Color current vertex
																					_lowerCAmelCase							=							i
																					# Validate coloring
																					if util_color(snake_case     , snake_case     , snake_case     , index + 1  ):
																												return True
																					# Backtrack
																					_lowerCAmelCase							=							-1
							return False






def _lowerCamelCase  (		snake_case     , snake_case  ):
							_lowerCAmelCase							=							[-1] * len(snake_case  )

							if util_color(snake_case     , snake_case     , snake_case     , 0  ):
														return colored_vertices

							return []







import functools






def _lowerCamelCase  (		snake_case     , snake_case  ):

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

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

							if len(snake_case  ) == 0:
														return 0

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

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

							_lowerCAmelCase							=							set(snake_case  )

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






