




'''simple docstring'''





from functools import lru_cache





def      __a     (       _UpperCamelCase:   int   )						->			set:

     """simple docstring"""




     _snake_case							=				2
     _snake_case							=				set()
     while i * i <= n:
          if n % i:
               i += 1
          else:
               n //= i
               factors.add(_UpperCamelCase   )
     if n > 1:
          factors.add(_UpperCamelCase   )
     return factors





@lru_cache
def      __a     (       _UpperCamelCase:   int   )						->			int:

     """simple docstring"""




     return len(unique_prime_factors(_UpperCamelCase   )   )





def      __a     (       _UpperCamelCase:   list   )						->			bool:

     """simple docstring"""




     return len(set(_UpperCamelCase   )   ) in (0, 1)





def      __a     (       _UpperCamelCase:   int   )						->			list:

     """simple docstring"""




     _snake_case							=				2

     while True:
          # Increment each value of a generated range
          _snake_case							=				[base + i for i in range(_UpperCamelCase   )]

          # Run elements through out unique_prime_factors function
          # Append our target number to the end.
          _snake_case							=				[upf_len(_UpperCamelCase   ) for x in group]
          checker.append(_UpperCamelCase   )

          # If all numbers in the list are equal, return the group variable.
          if equality(_UpperCamelCase   ):
               return group

          # Increment our base variable by 1
          base += 1





def      __a     (       _UpperCamelCase:   int = 4   )						->			int:

     """simple docstring"""




     _snake_case							=				run(_UpperCamelCase   )
     return results[0] if len(_UpperCamelCase   ) else None


if __name__ == "__main__":
   print(solution())








'''simple docstring'''





import os
from shutil import copyfile
from typing import List, Optional, Tuple

from ...tokenization_utils import AddedToken
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import is_sentencepiece_available, logging


if is_sentencepiece_available():
   from .tokenization_big_bird import BigBirdTokenizer
else:
   UpperCamelCase_						:      List[Any]       =						None

UpperCamelCase_						:      Tuple       =						logging.get_logger(__name__)
UpperCamelCase_						:      Any       =						{'''vocab_file''': '''spiece.model''', '''tokenizer_file''': '''tokenizer.json'''}

UpperCamelCase_						:      Any       =						{
    '''vocab_file''': {
        '''google/bigbird-roberta-base''': '''https://huggingface.co/google/bigbird-roberta-base/resolve/main/spiece.model''',
        '''google/bigbird-roberta-large''': (
            '''https://huggingface.co/google/bigbird-roberta-large/resolve/main/spiece.model'''
        ),
        '''google/bigbird-base-trivia-itc''': (
            '''https://huggingface.co/google/bigbird-base-trivia-itc/resolve/main/spiece.model'''
        ),
    },
    '''tokenizer_file''': {
        '''google/bigbird-roberta-base''': (
            '''https://huggingface.co/google/bigbird-roberta-base/resolve/main/tokenizer.json'''
        ),
        '''google/bigbird-roberta-large''': (
            '''https://huggingface.co/google/bigbird-roberta-large/resolve/main/tokenizer.json'''
        ),
        '''google/bigbird-base-trivia-itc''': (
            '''https://huggingface.co/google/bigbird-base-trivia-itc/resolve/main/tokenizer.json'''
        ),
    },
}

UpperCamelCase_						:      Optional[int]       =						{
    '''google/bigbird-roberta-base''': 4096,
    '''google/bigbird-roberta-large''': 4096,
    '''google/bigbird-base-trivia-itc''': 4096,
}


UpperCamelCase_						:      List[str]       =						'''▁'''

class        _a    (						__lowerCAmelCase							):
     SCREAMING_SNAKE_CASE_							:   List[Any]       =						VOCAB_FILES_NAMES
     SCREAMING_SNAKE_CASE_							:   List[Any]       =						PRETRAINED_VOCAB_FILES_MAP
     SCREAMING_SNAKE_CASE_							:   Any       =						PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
     SCREAMING_SNAKE_CASE_							:   str       =						BigBirdTokenizer
     SCREAMING_SNAKE_CASE_							:   Tuple       =						["""input_ids""", """attention_mask"""]
     SCREAMING_SNAKE_CASE_							:   List[int]       =						[]






     def __init__(			self ,_SCREAMING_SNAKE_CASE=None ,_SCREAMING_SNAKE_CASE=None ,_SCREAMING_SNAKE_CASE="<unk>" ,_SCREAMING_SNAKE_CASE="<s>" ,_SCREAMING_SNAKE_CASE="</s>" ,_SCREAMING_SNAKE_CASE="<pad>" ,_SCREAMING_SNAKE_CASE="[SEP]" ,_SCREAMING_SNAKE_CASE="[MASK]" ,_SCREAMING_SNAKE_CASE="[CLS]" ,**_SCREAMING_SNAKE_CASE ,)							->      Dict:
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else bos_token
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else eos_token
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else unk_token
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else pad_token
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else cls_token
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else sep_token

          # Mask token behave like a normal word, i.e. include the space before it
          _snake_case							=				AddedToken(_SCREAMING_SNAKE_CASE ,lstrip=_SCREAMING_SNAKE_CASE ,rstrip=_SCREAMING_SNAKE_CASE   ) if isinstance(_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE   ) else mask_token

          super().__init__(
              _SCREAMING_SNAKE_CASE ,tokenizer_file=_SCREAMING_SNAKE_CASE ,bos_token=_SCREAMING_SNAKE_CASE ,eos_token=_SCREAMING_SNAKE_CASE ,unk_token=_SCREAMING_SNAKE_CASE ,sep_token=_SCREAMING_SNAKE_CASE ,pad_token=_SCREAMING_SNAKE_CASE ,cls_token=_SCREAMING_SNAKE_CASE ,mask_token=_SCREAMING_SNAKE_CASE ,**_SCREAMING_SNAKE_CASE ,)

          _snake_case							=				vocab_file
          _snake_case							=				False if not self.vocab_file else True






     def     _lowercase     (			self ,_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE = None   )							->      List[int]:
          _snake_case							=				[self.sep_token_id]
          _snake_case							=				[self.cls_token_id]
          if token_ids_a is None:
               return cls + token_ids_a + sep
          return cls + token_ids_a + sep + token_ids_a + sep






     def     _lowercase     (			self ,_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE = None ,_SCREAMING_SNAKE_CASE = False   )							->      List[int]:

          if already_has_special_tokens:
               if token_ids_a is not None:
                    raise ValueError(
                        "You should not supply a second sequence if the provided sequence of "
                        "ids is already formatted with special tokens for the model."   )
               return [1 if x in [self.sep_token_id, self.cls_token_id] else 0 for x in token_ids_a]

          if token_ids_a is None:
               return [1] + ([0] * len(_SCREAMING_SNAKE_CASE   )) + [1]
          return [1] + ([0] * len(_SCREAMING_SNAKE_CASE   )) + [1] + ([0] * len(_SCREAMING_SNAKE_CASE   )) + [1]






     def     _lowercase     (			self ,_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE = None   )							->      List[int]:
          _snake_case							=				[self.sep_token_id]
          _snake_case							=				[self.cls_token_id]

          if token_ids_a is None:
               return len(cls + token_ids_a + sep   ) * [0]
          return len(cls + token_ids_a + sep   ) * [0] + len(token_ids_a + sep   ) * [1]






     def     _lowercase     (			self ,_SCREAMING_SNAKE_CASE ,_SCREAMING_SNAKE_CASE = None   )							->      Tuple[str]:
          if not self.can_save_slow_tokenizer:
               raise ValueError(
                   "Your fast tokenizer does not have the necessary information to save the vocabulary for a slow "
                   "tokenizer."   )

          if not os.path.isdir(_SCREAMING_SNAKE_CASE   ):
               logger.error(f"""Vocabulary path ({save_directory}) should be a directory"""   )
               return
          _snake_case							=				os.path.join(
              _SCREAMING_SNAKE_CASE ,(filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]   )

          if os.path.abspath(self.vocab_file   ) != os.path.abspath(_SCREAMING_SNAKE_CASE   ):
               copyfile(self.vocab_file ,_SCREAMING_SNAKE_CASE   )

          return (out_vocab_file,)


