


"""simple docstring"""






from .integrations import (
    is_optuna_available,
    is_ray_available,
    is_sigopt_available,
    is_wandb_available,
    run_hp_search_optuna,
    run_hp_search_ray,
    run_hp_search_sigopt,
    run_hp_search_wandb,
)
from .trainer_utils import (
    HPSearchBackend,
    default_hp_space_optuna,
    default_hp_space_ray,
    default_hp_space_sigopt,
    default_hp_space_wandb,
)
from .utils import logging


__snake_case		=       logging.get_logger(__name__)


class     __lowerCamelCase  :

					'''simple docstring'''
					A_       :	str
					A_       :	str    =		None


					@staticmethod
					def 							_UpperCAmelCase      (      )       ->							Union[str, Any]:
										raise NotImplementedError


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)       ->							int:
										raise NotImplementedError


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase							)       ->							int:
										raise NotImplementedError


					def 							_UpperCAmelCase      (      self							)       ->							Optional[Any]:
										if not self.is_available():
															raise RuntimeError(
															    F'You picked the {self.name} backend, but it is not installed. Run {self.pip_install()}.'							)





					@classmethod
					def 							_UpperCAmelCase      (      cls							)       ->							Union[str, Any]:
										return F'`pip install {cls.pip_package or cls.name}`'







class     __lowerCamelCase  (					a__				):

					'''simple docstring'''
					A_       :	Union[str, Any]    =		'optuna'


					@staticmethod
					def 							_UpperCAmelCase      (      )       ->							List[Any]:
										return is_optuna_available()


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)       ->							str:
										return run_hp_search_optuna(__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)





					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase							)       ->							Union[str, Any]:
										return default_hp_space_optuna(__UpperCAmelCase							)







class     __lowerCamelCase  (					a__				):

					'''simple docstring'''
					A_       :	Any    =		'ray'
					A_       :	Optional[int]    =		'\'ray[tune]\''


					@staticmethod
					def 							_UpperCAmelCase      (      )       ->							List[str]:
										return is_ray_available()


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)       ->							List[Any]:
										return run_hp_search_ray(__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)





					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase							)       ->							Tuple:
										return default_hp_space_ray(__UpperCAmelCase							)







class     __lowerCamelCase  (					a__				):

					'''simple docstring'''
					A_       :	Dict    =		'sigopt'


					@staticmethod
					def 							_UpperCAmelCase      (      )       ->							Dict:
										return is_sigopt_available()


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)       ->							Optional[Any]:
										return run_hp_search_sigopt(__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)





					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase							)       ->							List[str]:
										return default_hp_space_sigopt(__UpperCAmelCase							)







class     __lowerCamelCase  (					a__				):

					'''simple docstring'''
					A_       :	int    =		'wandb'


					@staticmethod
					def 							_UpperCAmelCase      (      )       ->							List[Any]:
										return is_wandb_available()


					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)       ->							int:
										return run_hp_search_wandb(__UpperCAmelCase    ,				__UpperCAmelCase    ,				__UpperCAmelCase    ,				**__UpperCAmelCase							)





					def 							_UpperCAmelCase      (      self    ,				__UpperCAmelCase							)       ->							int:
										return default_hp_space_wandb(__UpperCAmelCase							)







__snake_case		=       {
    HPSearchBackend(backend.name): backend for backend in [OptunaBackend, RayTuneBackend, SigOptBackend, WandbBackend]
}
def       A_   (   ):






					"""simple docstring"""

					_a    	=				[backend for backend in ALL_HYPERPARAMETER_SEARCH_BACKENDS.values() if backend.is_available()]
					if len(_lowerCAmelCase       ) > 0:
										_a    	=				available_backends[0].name
										if len(_lowerCAmelCase       ) > 1:
															logger.info(
															    f'{len(_lowerCAmelCase       )} hyperparameter search backends available. Using {name} as the default.'       )
										return name
					raise RuntimeError(
					    '''No hyperparameter search backend available.\n'''
					    + '''\n'''.join(
					        f' - To install {backend.name} run {backend.pip_install()}'
					        for backend in ALL_HYPERPARAMETER_SEARCH_BACKENDS.values()       )       )



"""simple docstring"""






def       A_   (   _lowerCAmelCase     :					int = 10_00       ):






     """simple docstring"""

     _a	,      _a    	=				1, 1
     _a    	=				2
     while True:
          _a    	=				0
          _a    	=				fa + fa
          _a	,      _a    	=				fa, f
          index += 1
          for _ in str(_lowerCAmelCase       ):
               i += 1
          if i == n:
               break
     return index


if __name__ == "__main__":
   print(solution(int(str(input()).strip())))