



import math
from datetime import datetime, timedelta



def __lowerCAmelCase (     SCREAMING_SNAKE_CASE_  ):
			lowercase__					  =				year % 19
			lowercase__					  =				year % 4
			lowercase__					  =				year % 7
			lowercase__					  =				math.floor(year / 100  )
			lowercase__					  =				math.floor((13 + 8 * leap_day_inhibits) / 25  )
			lowercase__					  =				leap_day_inhibits / 4
			lowercase__					  =				(
			    15 - lunar_orbit_correction + leap_day_inhibits - leap_day_reinstall_number
			) % 30
			lowercase__					  =				(4 + leap_day_inhibits - leap_day_reinstall_number) % 7

			# days to be added to March 21
			lowercase__					  =				(19 * metonic_cycle + secular_moon_shift) % 30

			# PHM -> Paschal Full Moon
			lowercase__					  =				(
			    2 * julian_leap_year
			    + 4 * non_leap_year
			    + 6 * days_to_add
			    + century_starting_point
			) % 7

			if days_to_add == 29 and days_from_phm_to_sunday == 6:
						return datetime(SCREAMING_SNAKE_CASE_						,  4						,  19  )
			elif days_to_add == 28 and days_from_phm_to_sunday == 6:
						return datetime(SCREAMING_SNAKE_CASE_						,  4						,  18  )
			else:
						return datetime(SCREAMING_SNAKE_CASE_						,  3						,  22  ) + timedelta(
						    days=int(days_to_add + days_from_phm_to_sunday  )  )


if __name__ == "__main__":
							for year in (1994, 2000, 2010, 2021, 2023):
														lowercase_								=     """will be""" if year > datetime.now().year else """was"""
														print(F'Easter in {year} {tense} {gauss_easter(year)}')









def __lowerCAmelCase (     SCREAMING_SNAKE_CASE_  ):
			if upper_limit < 0:
						raise ValueError("Limit for the Catalan sequence must be ≥ 0"  )

			lowercase__					  =				[0] * (upper_limit + 1)

			# Base case: C(0) = C(1) = 1
			lowercase__					  =				1
			if upper_limit > 0:
						lowercase__					  =				1

			# Recurrence relation: C(i) = sum(C(j).C(i-j-1)), from j = 0 to i
			for i in range(2						,  upper_limit + 1  ):
						for j in range(SCREAMING_SNAKE_CASE_  ):
									catalan_list[i] += catalan_list[j] * catalan_list[i - j - 1]

			return catalan_list


if __name__ == "__main__":
							print("""\n********* Catalan Numbers Using Dynamic Programming ************\n""")
							print("""\n*** Enter -1 at any time to quit ***""")
							print("""\nEnter the upper limit (≥ 0) for the Catalan number sequence: """, end="""""")
							try:
														while True:
																					lowercase_								=     int(input().strip())
																					if N < 0:
																												print("""\n********* Goodbye!! ************""")
																												break
																					else:
																												print(F'The Catalan numbers from 0 through {N} are:')
																												print(catalan_numbers(N))
																												print("""Try another upper limit for the sequence: """, end="""""")
							except (NameError, ValueError):
														print("""\n********* Invalid input, goodbye! ************\n""")

							import doctest

							doctest.testmod()




