
'''simple docstring'''

import math
import sys


def        UpperCAmelCase_ (  lowerCamelCase_			):







 """simple docstring"""


 if number != int(lowerCamelCase_			):
  raise ValueError("the value of input must be a natural number"			)
 if number < 0:
  raise ValueError("the value of input must not be a negative number"			)
 if number == 0:
  return 1
 lowerCAmelCase__     :   List[Any]     		=	[-1] * (number + 1)
 lowerCAmelCase__     :   List[Any]     		=	0
 for i in range(1      ,			number + 1			):
  lowerCAmelCase__     :   List[Any]     		=	sys.maxsize
  lowerCAmelCase__     :   Tuple     		=	int(math.sqrt(lowerCamelCase_			)			)
  for j in range(1      ,			root + 1			):
   lowerCAmelCase__     :   List[Any]     		=	1 + answers[i - (j**2)]
   lowerCAmelCase__     :   Union[str, Any]     		=	min(lowerCamelCase_      ,			lowerCamelCase_			)
  lowerCAmelCase__     :   Union[str, Any]     		=	answer
 return answers[number]


if __name__ == "__main__":
     import doctest

     doctest.testmod()







'''simple docstring'''

import warnings
from functools import wraps
from typing import Callable


def        UpperCAmelCase_ (  lowerCamelCase_			):







 """simple docstring"""


 @wraps(lowerCamelCase_			)
 def _inner_fn(*lowerCamelCase_      ,			**lowerCamelCase_			):
  warnings.warn(
      (f'''\'{fn.__name__}\' is experimental and might be subject to breaking changes in the future.''')      ,			lowerCamelCase_      ,			)
  return fn(*lowerCamelCase_      ,			**lowerCamelCase_			)

 return _inner_fn





