





'''simple docstring'''
import math
def 				lowercase__   (   __lowercase						:  int     ) ->      bool:



       """simple docstring"""






       return math.sqrt(__lowercase     ) * math.sqrt(__lowercase     ) == num
def 				lowercase__   (   __lowercase						:  int     ) ->      bool:



       """simple docstring"""






       __UpperCamelCase       =  0
       __UpperCamelCase       =  n
       while left <= right:
              __UpperCamelCase       =  (left + right) // 2
              if mid**2 == n:
                     return True
              elif mid**2 > n:
                     __UpperCamelCase       =  mid - 1
              else:
                     __UpperCamelCase       =  mid + 1
       return False


if __name__ == "__main__":
    import doctest

    doctest.testmod()







'''simple docstring'''
from __future__ import annotations

from typing import Any

class      snake_case     (    __lowerCamelCase       ):




 """simple docstring"""



 pass






class      snake_case     :




 """simple docstring"""



 def __init__(       self       :							List[Any]							,	__A       :							Any	):
        __UpperCamelCase       =  data
        __UpperCamelCase       =  None






 def __iter__(       self       :							Optional[Any]	):
        __UpperCamelCase       =  self
        __UpperCamelCase       =  []
        while node:
               if node in visited:
                      raise ContainsLoopError
               visited.append(__A	)
               yield node.data
               __UpperCamelCase       =  node.next_node






 @property
 def        _lowerCamelCase					(       self       :							List[str]	):
        try:
               list(self	)
               return False
        except ContainsLoopError:
               return True


if __name__ == "__main__":
    a__							:							Dict =Node(1)
    a__							:							Optional[int] =Node(2)
    a__							:							List[str] =Node(3)
    a__							:							Optional[int] =Node(4)
    print(root_node.has_loop)  # False
    a__							:							str =root_node.next_node
    print(root_node.has_loop)  # True

    a__							:							Optional[int] =Node(5)
    a__							:							List[Any] =Node(6)
    a__							:							int =Node(5)
    a__							:							Tuple =Node(6)
    print(root_node.has_loop)  # False

    a__							:							str =Node(1)
    print(root_node.has_loop)  # False
