






import math
from timeit import timeit
def       a__						(  A					):
   lowercase__						:	int         = 0
   lowercase__						:	List[Any]         = abs(A					)
   while True:
      lowercase__						:	Dict         = n // 10
      digits += 1
      if n == 0:
         break
   return digits
def       a__						(  A					):
   return 1 if n == 0 else math.floor(math.log(abs(A					)		,				10					) + 1					)
def       a__						(  A					):
   return len(str(abs(A					)					)					)
def       a__						(  ):
   from collections.abc import Callable

   def benchmark_a_function(A		,				A					) -> None:
      lowercase__						:	List[str]         = F'''{func.__name__}({value})'''
      lowercase__						:	int         = timeit(F'''__main__.{call}'''		,				setup="""import __main__"""					)
      print(F'''{call}: {func(A					)} -- {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(A		,				A					)
      print()


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 benchmark()










from __future__ import annotations

from collections.abc import Iterator
from typing import Any
class        __snake_case:



 def __init__(	self   :   Union[str, Any] ,		UpperCAmelCase__   :   Any	):

    """simple docstring"""






    lowercase__						:	Any         = data
    lowercase__						:	Node | None         = None







 def __str__(	self   :   Dict	):

    """simple docstring"""






    return f'''{self.data}'''
class        __snake_case:



 def __init__(	self   :   Optional[Any]	):

    """simple docstring"""






    lowercase__						:	Node | None         = None
    lowercase__						:	Node | None         = None



 def __iter__(	self   :   Any	):

    """simple docstring"""






    lowercase__						:	Any         = self.front
    while node:
       yield node.data
       lowercase__						:	List[str]         = node.next



 def __len__(	self   :   Union[str, Any]	):

    """simple docstring"""






    return len(tuple(iter(self	)	)	)



 def __str__(	self   :   Optional[Any]	):

    """simple docstring"""






    return " <- ".join(str(UpperCAmelCase__	) for item in self	)



 def 						UpperCAmelCase    (	self   :   List[str]	):

    """simple docstring"""






    return len(self	) == 0



 def 						UpperCAmelCase    (	self   :   Optional[int] ,		UpperCAmelCase__   :   Any	):

    """simple docstring"""






    lowercase__						:	List[str]         = Node(UpperCAmelCase__	)
    if self.is_empty():
       lowercase__						:	List[Any]         = node
    else:
       assert isinstance(self.rear ,		UpperCAmelCase__	)
       lowercase__						:	Any         = node
       lowercase__						:	Union[str, Any]         = node



 def 						UpperCAmelCase    (	self   :   List[Any]	):

    """simple docstring"""






    if self.is_empty():
       raise IndexError("""dequeue from empty queue"""	)
    assert isinstance(self.front ,		UpperCAmelCase__	)
    lowercase__						:	Tuple         = self.front
    lowercase__						:	Any         = self.front.next
    if self.front is None:
       lowercase__						:	List[Any]         = None
    return node.data







 def 						UpperCAmelCase    (	self   :   Optional[Any]	):

    """simple docstring"""






    lowercase__						:	List[Any]         = None


if __name__ == "__main__":
 from doctest import testmod

 testmod()


