





'''simple docstring'''

from __future__ import annotations







def 							UpperCAmelCase_    (	lowerCAmelCase_							):

				"""simple docstring"""






				lowercase         = len(lowerCAmelCase_							)
				# We need to create solution object to save path.
				lowercase         = [[0 for _ in range(lowerCAmelCase_							)] for _ in range(lowerCAmelCase_							)]
				lowercase         = run_maze(lowerCAmelCase_		,							0		,							0		,							lowerCAmelCase_							)
				if solved:
								print("\n".join(str(lowerCAmelCase_							) for row in solutions							)							)
				else:
								print("No solution exists!"							)
				return solved







def 							UpperCAmelCase_    (	lowerCAmelCase_		,							lowerCAmelCase_		,							lowerCAmelCase_		,							lowerCAmelCase_							):

				"""simple docstring"""






				lowercase         = len(lowerCAmelCase_							)
				# Final check point.
				if i == j == (size - 1):
								lowercase         = 1
								return True

				lowercase         = (not i < 0) and (not j < 0)  # Check lower bounds
				lowercase         = (i < size) and (j < size)  # Check upper bounds

				if lower_flag and upper_flag:
								# check for already visited and block points.
								lowercase         = (not solutions[i][j]) and (not maze[i][j])
								if block_flag:
												# check visited
												lowercase         = 1

												# check for directions
												if (
												    run_maze(lowerCAmelCase_		,							i + 1		,							lowerCAmelCase_		,							lowerCAmelCase_							)
												    or run_maze(lowerCAmelCase_		,							lowerCAmelCase_		,							j + 1		,							lowerCAmelCase_							)
												    or run_maze(lowerCAmelCase_		,							i - 1		,							lowerCAmelCase_		,							lowerCAmelCase_							)
												    or run_maze(lowerCAmelCase_		,							lowerCAmelCase_		,							j - 1		,							lowerCAmelCase_							)
												):
																return True

												lowercase         = 0
												return False
				return False


if __name__ == "__main__":
			import doctest

			doctest.testmod()











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

				lowercase         = 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()




