
"""simple docstring"""




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

							SCREAMING_SNAKE_CASE__		: Dict     =     [0] * (upper_limit + 1)

							# Base case: C(0) = C(1) = 1
							SCREAMING_SNAKE_CASE__		: Any     =     1
							if upper_limit > 0:
														SCREAMING_SNAKE_CASE__		: Optional[int]     =     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:
															UpperCAmelCase__   :					str												=				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()






"""simple docstring"""




def lowercase_						(     _snake_case		):
							if divisor % 5 == 0 or divisor % 2 == 0:
														return 0
							SCREAMING_SNAKE_CASE__		: List[str]     =     1
							SCREAMING_SNAKE_CASE__		: List[Any]     =     1
							while repunit:
														SCREAMING_SNAKE_CASE__		: Dict     =     (10 * repunit + 1) % divisor
														repunit_index += 1
							return repunit_index

def lowercase_						(     _snake_case = 1_000_000		):
							SCREAMING_SNAKE_CASE__		: int     =     limit - 1
							if divisor % 2 == 0:
														divisor += 1
							while least_divisible_repunit(_snake_case		) <= limit:
														divisor += 2
							return divisor


if __name__ == "__main__":
					print(f"""{solution() = }""")




