



'''simple docstring'''

from hashlib import mda, shaaaa

_A					:     Tuple      =(shaaaa, mda)



class 		lowerCamelCase__   :




					'''simple docstring'''



					def __init__(	self					:						Tuple  ,	UpperCamelCase_					:						int = 8       )	->							None:



						'''simple docstring'''





						_lowercase       :							str  	=		0B0
						_lowercase       :							Optional[Any]  	=		size




					def     __UpperCAmelCase  (	self					:						Tuple  ,	UpperCamelCase_					:						str       )	->							None:



						'''simple docstring'''





						_lowercase       :							Union[str, Any]  	=		self.hash_(UpperCamelCase_       )
						self.bitarray |= h




					def     __UpperCAmelCase  (	self					:						Tuple  ,	UpperCamelCase_					:						str       )	->							bool:



						'''simple docstring'''





						_lowercase       :							Dict  	=		self.hash_(UpperCamelCase_       )
						return (h & self.bitarray) == h




					def __contains__(	self					:						List[Any]  ,	UpperCamelCase_					:						str       )	->							bool:



						'''simple docstring'''





						return self.exists(UpperCamelCase_       )




					def     __UpperCAmelCase  (	self					:						Any  ,	UpperCamelCase_					:						int       )	->							str:



						'''simple docstring'''





						_lowercase       :							str  	=		bin(UpperCamelCase_       )[2:]
						return res.zfill(self.size       )




					@property
					def     __UpperCAmelCase  (	self					:						Union[str, Any]       )	->							str:



						'''simple docstring'''





						return self.format_bin(self.bitarray       )




					def     __UpperCAmelCase  (	self					:						Tuple  ,	UpperCamelCase_					:						str       )	->							int:



						'''simple docstring'''





						_lowercase       :							Any  	=		0B0
						for func in HASH_FUNCTIONS:
							_lowercase       :							Optional[int]  	=		(
							    int.from_bytes(func(value.encode()       ).digest()  ,	'little'       ) % self.size
							)
							res |= 2**position
						return res




					def     __UpperCAmelCase  (	self					:						str  ,	UpperCamelCase_					:						str       )	->							str:



						'''simple docstring'''





						return self.format_bin(self.hash_(UpperCamelCase_       )       )




					@property
					def     __UpperCAmelCase  (	self					:						Any       )	->							float:



						'''simple docstring'''





						_lowercase       :							List[str]  	=		bin(self.bitarray       ).count('1'       )
						return (n_ones / self.size) ** len(UpperCamelCase_       )





'''simple docstring'''

def     __UpperCamelCase					(				_lowercase = 1000       )			->      int:
	_lowercase       :							Optional[int]  	=		[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)
	_lowercase       :							List[Any]  	=		[0, 0, 6, 6, 5, 5, 5, 7, 6, 6]

	_lowercase       :							Any  	=		0

	for i in range(1,					n + 1       ):
		if i < 1000:
			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 // 1000] + 8
	return count


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