


def   _UpperCamelCase				(						lowerCAmelCase_  ,						lowerCAmelCase_   )						->int:
   UpperCAmelCase							=     1  # To kept the Calculated Value
   # Since C(n, k) = C(n, n-k)
   if k > (n - k):
      UpperCAmelCase							=     n - k
   # Calculate C(n,k)
   for i in range(lowerCAmelCase_   ):
      result *= n - i
      result //= i + 1
   return result
def   _UpperCamelCase				(						lowerCAmelCase_   )						->int:
   return binomial_coefficient(2 * node_count  ,						lowerCAmelCase_   ) // (node_count + 1)
def   _UpperCamelCase				(						lowerCAmelCase_   )						->int:
   if n < 0:
      raise ValueError("""factorial() not defined for negative values"""   )
   UpperCAmelCase							=     1
   for i in range(1  ,						n + 1   ):
      result *= i
   return result
def   _UpperCamelCase				(						lowerCAmelCase_   )						->int:
   return catalan_number(lowerCAmelCase_   ) * factorial(lowerCAmelCase_   )


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







def   _UpperCamelCase				(						lowerCAmelCase_  ,						lowerCAmelCase_   )						->int:
   return int((input_a, input_a).count(0   ) == 0   )
def   _UpperCamelCase				(						)						->None:
   assert and_gate(0  ,						0   ) == 0
   assert and_gate(0  ,						1   ) == 0
   assert and_gate(1  ,						0   ) == 0
   assert and_gate(1  ,						1   ) == 1


if __name__ == "__main__":
 test_and_gate()
 print(and_gate(1, 0))
 print(and_gate(0, 0))
 print(and_gate(0, 1))
 print(and_gate(1, 1))



