


def 							_UpperCAmelCase				(UpperCamelCase__     :  int = 600851475143						):

       try:
              _A      :       List[str]				    = int(UpperCamelCase__						)
       except (TypeError, ValueError):
              raise TypeError("Parameter n must be int or castable to int."						)
       if n <= 0:
              raise ValueError("Parameter n must be greater than or equal to one."						)
       _A      :       List[Any]				    = 1
       _A      :       int				    = 2
       while i * i <= n:
              while n % i == 0:
                     _A      :       str				    = i
                     n //= i
              i += 1
       if n > 1:
              _A      :       Dict				    = n
       return int(UpperCamelCase__						)


if __name__ == "__main__":
    print(f"{solution() = }")







'''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
