






from typing import List

from tokenizers import NormalizedString, PreTokenizedString, normalizers


class  __lowercase :







					'''simple docstring'''




					def __init__(			self    :     Optional[int]	,		UpperCamelCase_    :     str			):


									"""simple docstring"""



									__A             =		vocab
									__A             =		normalizers.BertNormalizer(
									    clean_text=lowerCamelCase__	,		handle_chinese_chars=lowerCamelCase__	,		strip_accents=lowerCamelCase__	,		lowercase=lowerCamelCase__	,		)
									try:
													import rjieba
									except ImportError:
													raise ImportError(
													    """You need to install rjieba to use RoFormerTokenizer. """
													    """See https://pypi.org/project/rjieba/ for installation."""			)
									__A             =		rjieba




					def 						lowerCAmelCase_       (			self    :     int	,		UpperCamelCase_    :     List[Any]	,		UpperCamelCase_    :     Tuple			):


									"""simple docstring"""



									__A             =		[]

									# this code slice normalized_string is too slow (6s) but test_alignement_methods can pass
									for token, start, end in self.jieba.tokenize(str(lowerCamelCase__			)	,		hmm=lowerCamelCase__			):
													if token in self.vocab:
																	splits.append(normalized_string[start:end]			)
													else:
																	__A             =		self.normalizers.normalize_str(lowerCamelCase__			).split()
																	for token in token_list:
																					if token:
																									__A             =		start + len(lowerCamelCase__			)
																									splits.append(normalized_string[start:end]			)
																									__A             =		end

        # this code test_alignement_methods can't pass but fast (300ms)
        # for token in self.jieba.cut(str(normalized_string), False):
        #     if token in self.vocab:
        #         splits.append(NormalizedString(token))
        #     else:
        #         token_list = self.normalizers.normalize_str(token).split()
        #         for token in token_list:
        #             if token:
        #                 splits.append(NormalizedString(token))

									return splits





					def 						lowerCAmelCase_       (			self    :     Optional[int]	,		UpperCamelCase_    :     int			):


									"""simple docstring"""



									pretok.split(self.jieba_split			)












def      _SCREAMING_SNAKE_CASE  (	__lowercase				:     int     ,			__lowercase				:     int      )  -> int:





    """simple docstring"""

    __A             =		1.0
    for i in range(1     ,			r + 1      ):
        ret *= (n + 1 - i) / i
    return round(__lowercase      )



def      _SCREAMING_SNAKE_CASE  (	__lowercase				:     int      )  -> int:





    """simple docstring"""

    return choose(8 + n     ,			__lowercase      ) + choose(9 + n     ,			__lowercase      ) - 1_0



def      _SCREAMING_SNAKE_CASE  (	__lowercase				:     int      )  -> int:





    """simple docstring"""

    return sum(non_bouncy_exact(__lowercase      ) for i in range(1     ,			n + 1      )      )



def      _SCREAMING_SNAKE_CASE  (	__lowercase				:     int = 1_0_0      )  -> int:





    """simple docstring"""

    return non_bouncy_upto(__lowercase      )


if __name__ == "__main__":
  print(f"""{solution() = }""")




