"""simple docstring"""



__A :     Optional[Any]				       =				{}



def 		lowercase (       UpperCamelCase     :     int       ,  UpperCamelCase     :     int       ,  UpperCamelCase     :     int		):





      """simple docstring"""

      # 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__	:      Optional[int]      =(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__	:      Dict      =_calculate(days - 1       ,  UpperCamelCase       ,  late + 1		)

      # 2) if we are absent, the "absent" counter increases by 1, and the
      # "late" counter resets to 0
      A__	:      str      =_calculate(days - 1       ,  absent + 1       ,  0		)

      # 3) if we are on time, this resets the "late" counter and keeps the
      # absent counter
      A__	:      List[str]      =_calculate(days - 1       ,  UpperCamelCase       ,  0		)

      A__	:      List[Any]      =state_late + state_absent + state_ontime

      A__	:      int      =prizestrings
      return prizestrings



def 		lowercase (       UpperCamelCase     :     int = 30		):





      """simple docstring"""
      return _calculate(UpperCamelCase       ,  absent=0       ,  late=0		)


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













from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_tokenizers_available,
    is_torch_available,
    is_vision_available,
)


UpperCAmelCase__							  =						{"processing_layoutxlm": ["LayoutXLMProcessor"]}

try:
     if not is_sentencepiece_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     UpperCAmelCase__							  =						["LayoutXLMTokenizer"]

try:
     if not is_tokenizers_available():
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     pass
else:
     UpperCAmelCase__							  =						["LayoutXLMTokenizerFast"]

if TYPE_CHECKING:
     from .processing_layoutxlm import LayoutXLMProcessor

     try:
          if not is_sentencepiece_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .tokenization_layoutxlm import LayoutXLMTokenizer

     try:
          if not is_tokenizers_available():
               raise OptionalDependencyNotAvailable()
     except OptionalDependencyNotAvailable:
          pass
     else:
          from .tokenization_layoutxlm_fast import LayoutXLMTokenizerFast

else:
     import sys

     UpperCAmelCase__							  =						_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)


