






import math
from timeit import timeit

def   SCREAMING_SNAKE_CASE_				(				__magic_name__   :    int   )						->     int:






	"""simple docstring"""



	UpperCamelCase	:Union[str, Any]		=      0
	UpperCamelCase	:Tuple		=      abs(__magic_name__   )
	while True:
		UpperCamelCase	:int		=      n // 10
		digits += 1
		if n == 0:
			break
	return digits

def   SCREAMING_SNAKE_CASE_				(				__magic_name__   :    int   )						->     int:






	"""simple docstring"""



	return 1 if n == 0 else math.floor(math.log(abs(__magic_name__   )      ,     10   ) + 1   )

def   SCREAMING_SNAKE_CASE_				(				__magic_name__   :    int   )						->     int:






	"""simple docstring"""



	return len(str(abs(__magic_name__   )   )   )

def   SCREAMING_SNAKE_CASE_				(				)						->     None:






	"""simple docstring"""



	from collections.abc import Callable

	def benchmark_a_function(__magic_name__   :    Callable      ,     __magic_name__   :    int   ) -> None:
		UpperCamelCase	:List[str]		=      f"""{func.__name__}({value})"""
		UpperCamelCase	:Optional[int]		=      timeit(f"""__main__.{call}"""      ,     setup="""import __main__"""   )
		print(f"""{call}: {func(__magic_name__   )} -- {timing} seconds"""   )

	for value in (26_2144, 1125_8999_0684_2624, 126_7650_6002_2822_9401_4967_0320_5376):
		for func in (num_digits, num_digits_fast, num_digits_faster):
			benchmark_a_function(__magic_name__      ,     __magic_name__   )
		print()


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	benchmark()








from __future__ import annotations

# Define the Gravitational Constant G and the function
UpperCAmelCase_					:		Union[str, Any]           = 6.6_743E-11  # unit of G : m^3 * kg^-1 * s^-2

def   SCREAMING_SNAKE_CASE_				(				__magic_name__   :    float      ,     __magic_name__   :    float      ,     __magic_name__   :    float      ,     __magic_name__   :    float   )						->     dict[str, float]:






	"""simple docstring"""



	UpperCamelCase	:List[str]		=      mass_a * mass_a

	if (force, mass_a, mass_a, distance).count(0   ) != 1:
		raise ValueError("""One and only one argument must be 0"""   )
	if force < 0:
		raise ValueError("""Gravitational force can not be negative"""   )
	if distance < 0:
		raise ValueError("""Distance can not be negative"""   )
	if mass_a < 0 or mass_a < 0:
		raise ValueError("""Mass can not be negative"""   )
	if force == 0:
		UpperCamelCase	:Optional[int]		=      GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2)
		return {"force": force}
	elif mass_a == 0:
		UpperCamelCase	:Any		=      (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
		return {"mass_1": mass_a}
	elif mass_a == 0:
		UpperCamelCase	:Optional[int]		=      (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
		return {"mass_2": mass_a}
	elif distance == 0:
		UpperCamelCase	:str		=      (GRAVITATIONAL_CONSTANT * product_of_mass / (force)) ** 0.5
		return {"distance": distance}
	raise ValueError("""One and only one argument must be 0"""   )


# Run doctest
if __name__ == "__main__":
	import doctest

	doctest.testmod()
