
"""simple docstring"""






from typing import TYPE_CHECKING

from ..utils import OptionalDependencyNotAvailable, _LazyModule, is_flax_available, is_tf_available, is_torch_available


__UpperCAmelCase 					=    {
    'configuration_utils': ['GenerationConfig'],
    'streamers': ['TextIteratorStreamer', 'TextStreamer'],
}

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__UpperCAmelCase 					=    [
				    'Constraint',
				    'ConstraintListState',
				    'DisjunctiveConstraint',
				    'PhrasalConstraint',
				]
				__UpperCAmelCase 					=    [
				    'BeamHypotheses',
				    'BeamScorer',
				    'BeamSearchScorer',
				    'ConstrainedBeamSearchScorer',
				]
				__UpperCAmelCase 					=    [
				    'EpsilonLogitsWarper',
				    'EtaLogitsWarper',
				    'ForcedBOSTokenLogitsProcessor',
				    'ForcedEOSTokenLogitsProcessor',
				    'HammingDiversityLogitsProcessor',
				    'InfNanRemoveLogitsProcessor',
				    'LogitsProcessor',
				    'LogitsProcessorList',
				    'LogitsWarper',
				    'MinLengthLogitsProcessor',
				    'MinNewTokensLengthLogitsProcessor',
				    'NoBadWordsLogitsProcessor',
				    'NoRepeatNGramLogitsProcessor',
				    'PrefixConstrainedLogitsProcessor',
				    'RepetitionPenaltyLogitsProcessor',
				    'SequenceBiasLogitsProcessor',
				    'EncoderRepetitionPenaltyLogitsProcessor',
				    'TemperatureLogitsWarper',
				    'TopKLogitsWarper',
				    'TopPLogitsWarper',
				    'TypicalLogitsWarper',
				    'EncoderNoRepeatNGramLogitsProcessor',
				    'ExponentialDecayLengthPenalty',
				    'LogitNormalization',
				]
				__UpperCAmelCase 					=    [
				    'MaxNewTokensCriteria',
				    'MaxLengthCriteria',
				    'MaxTimeCriteria',
				    'StoppingCriteria',
				    'StoppingCriteriaList',
				    'validate_stopping_criteria',
				]
				__UpperCAmelCase 					=    [
				    'GenerationMixin',
				    'top_k_top_p_filtering',
				    'GreedySearchEncoderDecoderOutput',
				    'GreedySearchDecoderOnlyOutput',
				    'SampleEncoderDecoderOutput',
				    'SampleDecoderOnlyOutput',
				    'BeamSearchEncoderDecoderOutput',
				    'BeamSearchDecoderOnlyOutput',
				    'BeamSampleEncoderDecoderOutput',
				    'BeamSampleDecoderOnlyOutput',
				    'ContrastiveSearchEncoderDecoderOutput',
				    'ContrastiveSearchDecoderOnlyOutput',
				]

try:
				if not is_tf_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__UpperCAmelCase 					=    [
				    'TFForcedBOSTokenLogitsProcessor',
				    'TFForcedEOSTokenLogitsProcessor',
				    'TFLogitsProcessor',
				    'TFLogitsProcessorList',
				    'TFLogitsWarper',
				    'TFMinLengthLogitsProcessor',
				    'TFNoBadWordsLogitsProcessor',
				    'TFNoRepeatNGramLogitsProcessor',
				    'TFRepetitionPenaltyLogitsProcessor',
				    'TFTemperatureLogitsWarper',
				    'TFTopKLogitsWarper',
				    'TFTopPLogitsWarper',
				    'TFForceTokensLogitsProcessor',
				    'TFSuppressTokensAtBeginLogitsProcessor',
				    'TFSuppressTokensLogitsProcessor',
				]
				__UpperCAmelCase 					=    [
				    'TFGenerationMixin',
				    'tf_top_k_top_p_filtering',
				    'TFGreedySearchDecoderOnlyOutput',
				    'TFGreedySearchEncoderDecoderOutput',
				    'TFSampleEncoderDecoderOutput',
				    'TFSampleDecoderOnlyOutput',
				    'TFBeamSearchEncoderDecoderOutput',
				    'TFBeamSearchDecoderOnlyOutput',
				    'TFBeamSampleEncoderDecoderOutput',
				    'TFBeamSampleDecoderOnlyOutput',
				    'TFContrastiveSearchEncoderDecoderOutput',
				    'TFContrastiveSearchDecoderOnlyOutput',
				]

try:
				if not is_flax_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				__UpperCAmelCase 					=    [
				    'FlaxForcedBOSTokenLogitsProcessor',
				    'FlaxForcedEOSTokenLogitsProcessor',
				    'FlaxLogitsProcessor',
				    'FlaxLogitsProcessorList',
				    'FlaxLogitsWarper',
				    'FlaxMinLengthLogitsProcessor',
				    'FlaxTemperatureLogitsWarper',
				    'FlaxTopKLogitsWarper',
				    'FlaxTopPLogitsWarper',
				]
				__UpperCAmelCase 					=    [
				    'FlaxGenerationMixin',
				    'FlaxGreedySearchOutput',
				    'FlaxSampleOutput',
				    'FlaxBeamSearchOutput',
				]

if TYPE_CHECKING:
				from .configuration_utils import GenerationConfig
				from .streamers import TextIteratorStreamer, TextStreamer

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .beam_constraints import Constraint, ConstraintListState, DisjunctiveConstraint, PhrasalConstraint
								from .beam_search import BeamHypotheses, BeamScorer, BeamSearchScorer, ConstrainedBeamSearchScorer
								from .logits_process import (
								    EncoderNoRepeatNGramLogitsProcessor,
								    EncoderRepetitionPenaltyLogitsProcessor,
								    EpsilonLogitsWarper,
								    EtaLogitsWarper,
								    ExponentialDecayLengthPenalty,
								    ForcedBOSTokenLogitsProcessor,
								    ForcedEOSTokenLogitsProcessor,
								    HammingDiversityLogitsProcessor,
								    InfNanRemoveLogitsProcessor,
								    LogitNormalization,
								    LogitsProcessor,
								    LogitsProcessorList,
								    LogitsWarper,
								    MinLengthLogitsProcessor,
								    MinNewTokensLengthLogitsProcessor,
								    NoBadWordsLogitsProcessor,
								    NoRepeatNGramLogitsProcessor,
								    PrefixConstrainedLogitsProcessor,
								    RepetitionPenaltyLogitsProcessor,
								    SequenceBiasLogitsProcessor,
								    TemperatureLogitsWarper,
								    TopKLogitsWarper,
								    TopPLogitsWarper,
								    TypicalLogitsWarper,
								)
								from .stopping_criteria import (
								    MaxLengthCriteria,
								    MaxNewTokensCriteria,
								    MaxTimeCriteria,
								    StoppingCriteria,
								    StoppingCriteriaList,
								    validate_stopping_criteria,
								)
								from .utils import (
								    BeamSampleDecoderOnlyOutput,
								    BeamSampleEncoderDecoderOutput,
								    BeamSearchDecoderOnlyOutput,
								    BeamSearchEncoderDecoderOutput,
								    ContrastiveSearchDecoderOnlyOutput,
								    ContrastiveSearchEncoderDecoderOutput,
								    GenerationMixin,
								    GreedySearchDecoderOnlyOutput,
								    GreedySearchEncoderDecoderOutput,
								    SampleDecoderOnlyOutput,
								    SampleEncoderDecoderOutput,
								    top_k_top_p_filtering,
								)

				try:
								if not is_tf_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .tf_logits_process import (
								    TFForcedBOSTokenLogitsProcessor,
								    TFForcedEOSTokenLogitsProcessor,
								    TFForceTokensLogitsProcessor,
								    TFLogitsProcessor,
								    TFLogitsProcessorList,
								    TFLogitsWarper,
								    TFMinLengthLogitsProcessor,
								    TFNoBadWordsLogitsProcessor,
								    TFNoRepeatNGramLogitsProcessor,
								    TFRepetitionPenaltyLogitsProcessor,
								    TFSuppressTokensAtBeginLogitsProcessor,
								    TFSuppressTokensLogitsProcessor,
								    TFTemperatureLogitsWarper,
								    TFTopKLogitsWarper,
								    TFTopPLogitsWarper,
								)
								from .tf_utils import (
								    TFBeamSampleDecoderOnlyOutput,
								    TFBeamSampleEncoderDecoderOutput,
								    TFBeamSearchDecoderOnlyOutput,
								    TFBeamSearchEncoderDecoderOutput,
								    TFContrastiveSearchDecoderOnlyOutput,
								    TFContrastiveSearchEncoderDecoderOutput,
								    TFGenerationMixin,
								    TFGreedySearchDecoderOnlyOutput,
								    TFGreedySearchEncoderDecoderOutput,
								    TFSampleDecoderOnlyOutput,
								    TFSampleEncoderDecoderOutput,
								    tf_top_k_top_p_filtering,
								)

				try:
								if not is_flax_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .flax_logits_process import (
								    FlaxForcedBOSTokenLogitsProcessor,
								    FlaxForcedEOSTokenLogitsProcessor,
								    FlaxLogitsProcessor,
								    FlaxLogitsProcessorList,
								    FlaxLogitsWarper,
								    FlaxMinLengthLogitsProcessor,
								    FlaxTemperatureLogitsWarper,
								    FlaxTopKLogitsWarper,
								    FlaxTopPLogitsWarper,
								)
								from .flax_utils import FlaxBeamSearchOutput, FlaxGenerationMixin, FlaxGreedySearchOutput, FlaxSampleOutput
else:
				import sys

				__UpperCAmelCase 					=    _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)













'''simple docstring'''






def 				_lowerCamelCase(	UpperCamelCase__     :			int = 1_000		)		->	int:
    A							:							Optional[Any]				=    [0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8]
    # number of letters in twenty, thirty, ..., ninety (0 for numbers less than
    # 20 due to inconsistency in teens)
    A							:							Tuple				=    [0, 0, 6, 6, 5, 5, 5, 7, 6, 6]

    A							:							str				=    0

    for i in range(1     ,							n + 1		):
        if i < 1_000:
            if i >= 100:
                # add number of letters for "n hundred"
                count += ones_counts[i // 100] + 7

                if i % 100 != 0:
                    # add number of letters for "and" if number is not multiple
                    # of 100
                    count += 3

            if 0 < i % 100 < 20:
                # add number of letters for one, two, three, ..., nineteen
                # (could be combined with below if not for inconsistency in
                # teens)
                count += ones_counts[i % 100]
            else:
                # add number of letters for twenty, twenty one, ..., ninety
                # nine
                count += ones_counts[i % 10]
                count += tens_counts[(i % 100 - i % 10) // 10]
        else:
            count += ones_counts[i // 1_000] + 8
    return count


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