"""simple docstring"""




import argparse
import logging
import pickle
import random
import time

import numpy as np

from transformers import BertTokenizer, GPTaTokenizer, RobertaTokenizer


logging.basicConfig(
    format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", datefmt="%m/%d/%Y %H:%M:%S", level=logging.INFO
)
__lowerCAmelCase     :				Tuple    				=    logging.getLogger(__name__)







def 				_UpperCAmelCase		(							):





		"""simple docstring"""




		lowerCAmelCase__   = argparse.ArgumentParser(
		    description="""Preprocess the data to avoid re-doing it several times by (tokenization + token_to_ids)."""  )
		parser.add_argument("""--file_path"""      ,	type=lowerCamelCase__      ,	default="""data/dump.txt"""      ,	help="""The path to the data."""  )
		parser.add_argument("""--tokenizer_type"""      ,	type=lowerCamelCase__      ,	default="""bert"""      ,	choices=["""bert""", """roberta""", """gpt2"""]  )
		parser.add_argument("""--tokenizer_name"""      ,	type=lowerCamelCase__      ,	default="""bert-base-uncased"""      ,	help="""The tokenizer to use."""  )
		parser.add_argument("""--dump_file"""      ,	type=lowerCamelCase__      ,	default="""data/dump"""      ,	help="""The dump file prefix."""  )
		lowerCAmelCase__   = parser.parse_args()

		logger.info(f"""Loading Tokenizer ({args.tokenizer_name})"""  )
		if args.tokenizer_type == "bert":
				lowerCAmelCase__   = BertTokenizer.from_pretrained(args.tokenizer_name  )
				lowerCAmelCase__   = tokenizer.special_tokens_map["""cls_token"""]  # `[CLS]`
				lowerCAmelCase__   = tokenizer.special_tokens_map["""sep_token"""]  # `[SEP]`
		elif args.tokenizer_type == "roberta":
				lowerCAmelCase__   = RobertaTokenizer.from_pretrained(args.tokenizer_name  )
				lowerCAmelCase__   = tokenizer.special_tokens_map["""cls_token"""]  # `<s>`
				lowerCAmelCase__   = tokenizer.special_tokens_map["""sep_token"""]  # `</s>`
		elif args.tokenizer_type == "gpt2":
				lowerCAmelCase__   = GPTaTokenizer.from_pretrained(args.tokenizer_name  )
				lowerCAmelCase__   = tokenizer.special_tokens_map["""bos_token"""]  # `<|endoftext|>`
				lowerCAmelCase__   = tokenizer.special_tokens_map["""eos_token"""]  # `<|endoftext|>`

		logger.info(f"""Loading text from {args.file_path}"""  )
		with open(args.file_path      ,	"""r"""      ,	encoding="""utf8"""  ) as fp:
				lowerCAmelCase__   = fp.readlines()

		logger.info("""Start encoding"""  )
		logger.info(f"""{len(lowerCamelCase__  )} examples to process."""  )

		lowerCAmelCase__   = []
		lowerCAmelCase__   = 0
		lowerCAmelCase__   = 1_0000
		lowerCAmelCase__   = time.time()
		for text in data:
				lowerCAmelCase__   = f"""{bos} {text.strip()} {sep}"""
				lowerCAmelCase__   = tokenizer.encode(lowerCamelCase__      ,	add_special_tokens=lowerCamelCase__  )
				rslt.append(lowerCamelCase__  )

				iter += 1
				if iter % interval == 0:
						lowerCAmelCase__   = time.time()
						logger.info(f"""{iter} examples processed. - {(end-start):.2f}s/{interval}expl"""  )
						lowerCAmelCase__   = time.time()
		logger.info("""Finished binarization"""  )
		logger.info(f"""{len(lowerCamelCase__  )} examples processed."""  )

		lowerCAmelCase__   = f"""{args.dump_file}.{args.tokenizer_name}.pickle"""
		lowerCAmelCase__   = tokenizer.vocab_size
		if vocab_size < (1 << 16):
				lowerCAmelCase__   = [np.uintaa(lowerCamelCase__  ) for d in rslt]
		else:
				lowerCAmelCase__   = [np.intaa(lowerCamelCase__  ) for d in rslt]
		random.shuffle(rslt_  )
		logger.info(f"""Dump to {dp_file}"""  )
		with open(lowerCamelCase__      ,	"""wb"""  ) as handle:
				pickle.dump(rslt_      ,	lowerCamelCase__      ,	protocol=pickle.HIGHEST_PROTOCOL  )


if __name__ == "__main__":
			main()





"""simple docstring"""




from collections.abc import Generator







def 				_UpperCAmelCase		(							):





		"""simple docstring"""




		lowerCAmelCase__ ,       lowerCAmelCase__   = 0, 1
		while True:
				lowerCAmelCase__ ,       lowerCAmelCase__   = b, a + b
				yield b







def 				_UpperCAmelCase		(							lowerCamelCase__ = 1000  ):





		"""simple docstring"""




		lowerCAmelCase__   = 1
		lowerCAmelCase__   = fibonacci_generator()
		while len(str(next(lowerCamelCase__  )  )  ) < n:
				answer += 1
		return answer + 1


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




