


from ...configuration_utils import PretrainedConfig







class        snake_case_   (snake_case__      ):
					UpperCAmelCase__					:    Dict          =			"bert-generation"
					def __init__(      self   :str			,__snake_case   :str=5_03_58			,__snake_case   :int=10_24			,__snake_case   :Optional[Any]=24			,__snake_case   :Optional[int]=16			,__snake_case   :str=40_96			,__snake_case   :Tuple="gelu"			,__snake_case   :str=0.1			,__snake_case   :Dict=0.1			,__snake_case   :Tuple=5_12			,__snake_case   :Tuple=0.02			,__snake_case   :Optional[int]=1E-12			,__snake_case   :Union[str, Any]=0			,__snake_case   :Any=2			,__snake_case   :Dict=1			,__snake_case   :Tuple="absolute"			,__snake_case   :List[Any]=True			,**__snake_case   :List[Any]			,)					->    Dict:
												super().__init__(pad_token_id=__snake_case			,bos_token_id=__snake_case			,eos_token_id=__snake_case			,**__snake_case      )

												a__             =     vocab_size
												a__             =     hidden_size
												a__             =     num_hidden_layers
												a__             =     num_attention_heads
												a__             =     hidden_act
												a__             =     intermediate_size
												a__             =     hidden_dropout_prob
												a__             =     attention_probs_dropout_prob
												a__             =     max_position_embeddings
												a__             =     initializer_range
												a__             =     layer_norm_eps
												a__             =     position_embedding_type
												a__             =     use_cache





'''simple docstring'''




def 	UpperCamelCase_							(					_UpperCAmelCase  :      int			,	_UpperCAmelCase  :      int    )    ->    int:


       """simple docstring"""







       _UpperCAmelCase     :  List[str]							      =    1  # To kept the Calculated Value
       # Since C(n, k) = C(n, n-k)
       if k > (n - k):
              _UpperCAmelCase     :  Any							      =    n - k
       # Calculate C(n,k)
       for i in range(_UpperCAmelCase    ):
              result *= n - i
              result //= i + 1
       return result

def 	UpperCamelCase_							(					_UpperCAmelCase  :      int    )    ->    int:


       """simple docstring"""







       return binomial_coefficient(2 * node_count			,	_UpperCAmelCase    ) // (node_count + 1)

def 	UpperCamelCase_							(					_UpperCAmelCase  :      int    )    ->    int:


       """simple docstring"""







       if n < 0:
              raise ValueError("factorial() not defined for negative values"    )
       _UpperCAmelCase     :  List[str]							      =    1
       for i in range(1			,	n + 1    ):
              result *= i
       return result

def 	UpperCamelCase_							(					_UpperCAmelCase  :      int    )    ->    int:


       """simple docstring"""







       return catalan_number(_UpperCAmelCase    ) * factorial(_UpperCAmelCase    )


if __name__ == "__main__":
  __SCREAMING_SNAKE_CASE       :     Dict     =  int(input("""Enter the number of nodes: """).strip() or 0)
  if node_count <= 0:
    raise ValueError("""We need some nodes to work with.""")
  print(
      F'Given {node_count} nodes, there are {binary_tree_count(node_count)} '
      F'binary trees and {catalan_number(node_count)} binary search trees.'
  )

