






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






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






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






def 				lowerCamelCase__				(_UpperCAmelCase):
			return catalan_number(_UpperCAmelCase) * factorial(_UpperCAmelCase)


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












import os
from collections.abc import Iterator






def 				lowerCamelCase__				(_UpperCAmelCase = "."):
			for dir_path, dir_names, filenames in os.walk(_UpperCAmelCase):
						SCREAMING_SNAKE_CASE						= [d for d in dir_names if d != 'scripts' and d[0] not in '._']
						for filename in filenames:
									if filename == "__init__.py":
												continue
									if os.path.splitext(_UpperCAmelCase)[1] in (".py", ".ipynb"):
												yield os.path.join(_UpperCAmelCase							,       _UpperCAmelCase).lstrip('./')






def 				lowerCamelCase__				(_UpperCAmelCase):
			return F'''{i * '  '}*''' if i else "\n##"






def 				lowerCamelCase__				(_UpperCAmelCase							,       _UpperCAmelCase):
			SCREAMING_SNAKE_CASE						= old_path.split(os.sep)
			for i, new_part in enumerate(new_path.split(os.sep)):
						if (i + 1 > len(_UpperCAmelCase) or old_parts[i] != new_part) and new_part:
									print(F'''{md_prefix(_UpperCAmelCase)} {new_part.replace('_'							,       ' ').title()}''')
			return new_path






def 				lowerCamelCase__				(_UpperCAmelCase = "."):
			SCREAMING_SNAKE_CASE						= ''
			for filepath in sorted(good_file_paths(_UpperCAmelCase)):
						SCREAMING_SNAKE_CASE				,						SCREAMING_SNAKE_CASE						= os.path.split(_UpperCAmelCase)
						if filepath != old_path:
									SCREAMING_SNAKE_CASE						= print_path(_UpperCAmelCase							,       _UpperCAmelCase)
						SCREAMING_SNAKE_CASE						= (filepath.count(os.sep) + 1) if filepath else 0
						SCREAMING_SNAKE_CASE						= F'''{filepath}/{filename}'''.replace(' '							,       '%20')
						SCREAMING_SNAKE_CASE						= os.path.splitext(filename.replace('_'							,       ' ').title())[0]
						print(F'''{md_prefix(_UpperCAmelCase)} [{filename}]({url})''')


if __name__ == "__main__":
				print_directory_md('.')




