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



import os

# Precomputes a list of the 100 first triangular numbers
_A						      =				[int(0.5 * n * (n + 1)) for n in range(1, 1_01)]



def 		lowercase_    (     )							->							Tuple:
    """simple docstring"""

    snake_case				  =      os.path.dirname(os.path.realpath(A__	)	)
    snake_case				  =      os.path.join(A__				,	"words.txt"	)

    snake_case				  =      ""
    with open(A__	) as f:
        snake_case				  =      f.readline()

    snake_case				  =      [word.strip("\""	) for word in words.strip("\r\n"	).split(","	)]
    snake_case				  =      [
        word
        for word in [sum(ord(A__	) - 64 for x in word	) for word in words]
        if word in TRIANGULAR_NUMBERS
    ]
    return len(A__	)


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

