'''simple docstring'''




from collections import defaultdict

def 	UpperCamelCase_							(					_UpperCAmelCase  :      int    )    ->    int:


       """simple docstring"""







       _UpperCAmelCase     :  List[str]							      =    1
       _UpperCAmelCase     :  List[str]							      =    True
       for v in tree[start]:
              if v not in visited:
                     ret += dfs(_UpperCAmelCase    )
       if ret % 2 == 0:
              cuts.append(_UpperCAmelCase    )
       return ret

def 	UpperCamelCase_							(					)    ->    int:


       """simple docstring"""







       dfs(1    )


if __name__ == "__main__":
  __SCREAMING_SNAKE_CASE     ,					__SCREAMING_SNAKE_CASE       :     Tuple     =  10, 9
  __SCREAMING_SNAKE_CASE       :     Dict     =  defaultdict(list)
  __SCREAMING_SNAKE_CASE       :     dict[int, bool]     =  {}
  __SCREAMING_SNAKE_CASE       :     list[int]     =  []
  __SCREAMING_SNAKE_CASE       :     Union[str, Any]     =  0
  __SCREAMING_SNAKE_CASE       :     Any     =  [(2, 1), (3, 1), (4, 3), (5, 2), (6, 1), (7, 2), (8, 6), (9, 8), (10, 8)]
  for u, v in edges:
    tree[u].append(v)
    tree[v].append(u)
  even_tree()
  print(len(cuts) - 1)


'''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.'
  )

