



from __future__ import annotations

# Define the Gravitational Constant G and the function
__lowerCamelCase								=   6.67_43E-11  # unit of G : m^3 * kg^-1 * s^-2




def       UpperCAmelCase__	(							__snake_case  ,			__snake_case  ,			__snake_case  ,			__snake_case							)				->	dict[str, float]:
  _A          =      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:
    _A          =      GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2)
    return {"force": force}
  elif mass_a == 0:
    _A          =      (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
    return {"mass_1": mass_a}
  elif mass_a == 0:
    _A          =      (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_a)
    return {"mass_2": mass_a}
  elif distance == 0:
    _A          =      (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()




import math
from timeit import timeit




def       UpperCAmelCase__	(							__snake_case							)				->	int:
  _A          =      0
  _A          =      abs(__snake_case							)
  while True:
    _A          =      n // 10
    digits += 1
    if n == 0:
      break
  return digits




def       UpperCAmelCase__	(							__snake_case							)				->	int:
  return 1 if n == 0 else math.floor(math.log(abs(__snake_case							)  ,			10							) + 1							)




def       UpperCAmelCase__	(							__snake_case							)				->	int:
  return len(str(abs(__snake_case							)							)							)




def       UpperCAmelCase__	(							)				->	None:
  from collections.abc import Callable

  def benchmark_a_function(__snake_case  ,			__snake_case							) -> None:
    _A          =      F'''{func.__name__}({value})'''
    _A          =      timeit(F'''__main__.{call}'''  ,			setup='''import __main__'''							)
    print(F'''{call}: {func(__snake_case							)} -- {timing} seconds'''							)

  for value in (262_144, 1_125_899_906_842_624, 1_267_650_600_228_229_401_496_703_205_376):
    for func in (num_digits, num_digits_fast, num_digits_faster):
      benchmark_a_function(__snake_case  ,			__snake_case							)
    print()


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    benchmark()