


def      snake_case_						( __lowercase       ):
   if upper_limit < 0:
      raise ValueError('''Limit for the Catalan sequence must be ≥ 0'''       )

   UpperCAmelCase_							:      List[Any]						=   [0] * (upper_limit + 1)

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



from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


__UpperCamelCase				:  str      					=							{
    'configuration_x_clip': [
        'XCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP',
        'XCLIPConfig',
        'XCLIPTextConfig',
        'XCLIPVisionConfig',
    ],
    'processing_x_clip': ['XCLIPProcessor'],
}

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       __UpperCamelCase				:  Any      					=							[
           'XCLIP_PRETRAINED_MODEL_ARCHIVE_LIST',
           'XCLIPModel',
           'XCLIPPreTrainedModel',
           'XCLIPTextModel',
           'XCLIPVisionModel',
       ]

if TYPE_CHECKING:
       from .configuration_x_clip import (
           XCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP,
           XCLIPConfig,
           XCLIPTextConfig,
           XCLIPVisionConfig,
       )
       from .processing_x_clip import XCLIPProcessor

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_x_clip import (
                  XCLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
                  XCLIPModel,
                  XCLIPPreTrainedModel,
                  XCLIPTextModel,
                  XCLIPVisionModel,
              )

else:
       import sys

       __UpperCamelCase				:  List[str]      					=							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)