
def 				a						(							snake_case__:					int					):


				'''simple docstring'''
				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(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:
																		__a  			=					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()






def 				a						(							snake_case__:					list						,   snake_case__:					list						,   snake_case__:					int						,   snake_case__:					int						,   snake_case__:					int					):


				'''simple docstring'''
				if index == number_of_items:
								return 0
				lowercase_       =					0
				lowercase_       =					0
				lowercase_       =					knapsack(snake_case__						,   snake_case__						,   snake_case__						,   snake_case__						,   index + 1					)
				if weights[index] <= max_weight:
								lowercase_       =					values[index] + knapsack(
								    snake_case__						,   snake_case__						,   snake_case__						,   max_weight - weights[index]						,   index + 1					)
				return max(snake_case__						,   snake_case__					)


if __name__ == "__main__":
						import doctest

						doctest.testmod()




