'''simple docstring'''






from ...configuration_utils import PretrainedConfig
from ...utils import logging


_UpperCAmelCase    :     List[str]         =       logging.get_logger(__name__)

_UpperCAmelCase    :     Any         =       {
    '''facebook/timesformer''': '''https://huggingface.co/facebook/timesformer/resolve/main/config.json''',
}







class lowercase_       (		lowercase_			):







   """simple docstring"""

   __lowerCAmelCase         =   "timesformer"
   def __init__(      self      :			Optional[int], UpperCamelCase__      :			Optional[Any]=2_24, UpperCamelCase__      :			Dict=16, UpperCamelCase__      :			int=3, UpperCamelCase__      :			Tuple=8, UpperCamelCase__      :			Any=7_68, UpperCamelCase__      :			str=12, UpperCamelCase__      :			List[Any]=12, UpperCamelCase__      :			Optional[int]=30_72, UpperCamelCase__      :			Dict="gelu", UpperCamelCase__      :			Tuple=0.0, UpperCamelCase__      :			List[str]=0.0, UpperCamelCase__      :			Optional[Any]=0.02, UpperCamelCase__      :			Tuple=1e-6, UpperCamelCase__      :			str=True, UpperCamelCase__      :			Union[str, Any]="divided_space_time", UpperCamelCase__      :			List[str]=0, **UpperCamelCase__      :			List[str], )  ->			List[str]:
        super().__init__(**lowerCamelCase_     )

        _A    		=  image_size
        _A    		=  patch_size
        _A    		=  num_channels
        _A    		=  num_frames

        _A    		=  hidden_size
        _A    		=  num_hidden_layers
        _A    		=  num_attention_heads
        _A    		=  intermediate_size
        _A    		=  hidden_act
        _A    		=  hidden_dropout_prob
        _A    		=  attention_probs_dropout_prob
        _A    		=  initializer_range
        _A    		=  layer_norm_eps
        _A    		=  qkv_bias

        _A    		=  attention_type
        _A    		=  drop_path_rate










'''simple docstring'''




def 		__A		(  lowerCamelCase_			,			lowerCamelCase_	):


		"""simple docstring"""



		SCREAMING_SNAKE_CASE :				str		=			1  # To kept the Calculated Value
		# Since C(n, k) = C(n, n-k)
		if k > (n - k):
				SCREAMING_SNAKE_CASE :				Dict		=			n - k
		# Calculate C(n,k)
		for i in range(lowerCamelCase_	):
				result *= n - i
				result //= i + 1
		return result



def 		__A		(  lowerCamelCase_	):


		"""simple docstring"""



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



def 		__A		(  lowerCamelCase_	):


		"""simple docstring"""



		if n < 0:
				raise ValueError("""factorial() not defined for negative values"""	)
		SCREAMING_SNAKE_CASE :				Dict		=			1
		for i in range(1			,			n + 1	):
				result *= i
		return result



def 		__A		(  lowerCamelCase_	):


		"""simple docstring"""



		return catalan_number(lowerCamelCase_	) * factorial(lowerCamelCase_	)


if __name__ == "__main__":
							__UpperCAmelCase            =       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.'''
							)



