"""simple docstring"""







import random


def      __lowerCAmelCase(		__UpperCAmelCase     ,__UpperCAmelCase     ,__UpperCAmelCase = False			):






	"""simple docstring"""





	_lowercase :    Tuple							=							{i: [] for i in range(a__			)}

	# if probability is greater or equal than 1, then generate a complete graph
	if probability >= 1:
		return complete_graph(a__			)
	# if probability is lower or equal than 0, then return a graph without edges
	if probability <= 0:
		return graph

	# for each couple of nodes, add an edge from u to v
	# if the number randomly generated is greater than probability probability
	for i in range(a__			):
		for j in range(i + 1     ,a__			):
			if random.random() < probability:
				graph[i].append(a__			)
				if not directed:
					# if the graph is undirected, add an edge in from j to i, either
					graph[j].append(a__			)
	return graph


def      __lowerCAmelCase(		__UpperCAmelCase			):






	"""simple docstring"""





	return {
	    i: [j for j in range(a__			) if i != j] for i in range(a__			)
	}


if __name__ == "__main__":
						import doctest

						doctest.testmod()




"""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()



