
def 						lowercase_      (       A__		)							->							"list[int]":
				"""simple docstring"""

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

				snake_case								= [0] * (upper_limit + 1)

				# Base case: C(0) = C(1) = 1
				snake_case								= 1
				if upper_limit > 0:
								snake_case								= 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(A__		):
												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 						lowercase_      (       A__ = 1000		)							->							int:
    """simple docstring"""

    return sum(2 * a * ((a - 1) // 2) for a in range(3			,		n + 1		)		)


if __name__ == "__main__":
   print(solution())

