


'''simple docstring'''



__lowercase	:						dict[tuple[int, int, int], int]       =	{}






def   lowerCamelCase							(_SCREAMING_SNAKE_CASE      :   int						,      _SCREAMING_SNAKE_CASE      :   int						,      _SCREAMING_SNAKE_CASE      :   int   ):

					# if we are absent twice, or late 3 consecutive days,
					# no further prize strings are possible
					if late == 3 or absent == 2:
										return 0

					# if we have no days left, and have not failed any other rules,
					# we have a prize string
					if days == 0:
										return 1

					# No easy solution, so now we need to do the recursive calculation

					# First, check if the combination is already in the cache, and
					# if yes, return the stored value from there since we already
					# know the number of possible prize strings from this point on
					__a			:       List[str]					    =  (days, absent, late)
					if key in cache:
										return cache[key]

					# now we calculate the three possible ways that can unfold from
					# this point on, depending on our attendance today

					# 1) if we are late (but not absent), the "absent" counter stays as
					# it is, but the "late" counter increases by one
					__a			:       Union[str, Any]					    =  _calculate(days - 1						,      _SCREAMING_SNAKE_CASE						,      late + 1   )

					# 2) if we are absent, the "absent" counter increases by 1, and the
					# "late" counter resets to 0
					__a			:       Optional[Any]					    =  _calculate(days - 1						,      absent + 1						,      0   )

					# 3) if we are on time, this resets the "late" counter and keeps the
					# absent counter
					__a			:       Tuple					    =  _calculate(days - 1						,      _SCREAMING_SNAKE_CASE						,      0   )

					__a			:       Dict					    =  state_late + state_absent + state_ontime

					__a			:       str					    =  prizestrings
					return prizestrings






def   lowerCamelCase							(_SCREAMING_SNAKE_CASE      :   int = 30   ):
					return _calculate(_SCREAMING_SNAKE_CASE						,      absent=0						,      late=0   )


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







import os
import unittest

from transformers.models.cpmant.tokenization_cpmant import VOCAB_FILES_NAMES, CpmAntTokenizer
from transformers.testing_utils import require_jieba, tooslow

from ...test_tokenization_common import TokenizerTesterMixin





@require_jieba
class   __a			(    __UpperCamelCase       ,       unittest.TestCase      ):
 __lowercase :							str        = CpmAntTokenizer
 __lowercase :							List[Any]        = False
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				str:




        '''simple docstring'''
        super().setUp()

        lowercase__:   Any  			=   [
            '<d>',
            '</d>',
            '<s>',
            '</s>',
            '</_>',
            '<unk>',
            '<pad>',
            '</n>',
            '我',
            '是',
            'C',
            'P',
            'M',
            'A',
            'n',
            't',
        ]
        lowercase__:   List[Any]  			=   os.path.join(self.tmpdirname				, VOCAB_FILES_NAMES['vocab_file'] )
        with open(self.vocab_file				, 'w'				, encoding='utf-8' ) as vocab_writer:
               vocab_writer.write(''.join([x + '\n' for x in vocab_tokens] ) )
 @tooslow
 def 		SCREAMING_SNAKE_CASE__   (   self )					->				Tuple:




        '''simple docstring'''
        lowercase__:   Optional[int]  			=   CpmAntTokenizer.from_pretrained('openbmb/cpm-ant-10b' )
        lowercase__:   Optional[Any]  			=   '今天天气真好！'
        lowercase__:   str  			=   ['今天', '天气', '真', '好', '！']
        lowercase__:   Optional[Any]  			=   tokenizer.tokenize(lowerCAmelCase__ )
        self.assertListEqual(lowerCAmelCase__				, lowerCAmelCase__ )
        lowercase__:   List[str]  			=   '今天天气真好！'
        lowercase__:   List[str]  			=   [tokenizer.bos_token] + tokens

        lowercase__:   Tuple  			=   [6, 9_802, 14_962, 2_082, 831, 244]
        self.assertListEqual(tokenizer.convert_tokens_to_ids(lowerCAmelCase__ )				, lowerCAmelCase__ )

        lowercase__:   Any  			=   tokenizer.decode(lowerCAmelCase__ )
        self.assertEqual(lowerCAmelCase__				, lowerCAmelCase__ )


