__magic_name__    		={}







def 			__UpperCamelCase     (    A			,				A			,				A				):

     # 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
     UpperCamelCase__					    =   (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
     UpperCamelCase__					    =   _calculate(days - 1			,				lowerCAmelCase__			,				late + 1				)

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

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

     UpperCamelCase__					    =   state_late + state_absent + state_ontime

     UpperCamelCase__					    =   prizestrings
     return prizestrings







def 			__UpperCamelCase     (    A = 30				):
     return _calculate(lowerCAmelCase__			,				absent=0			,				late=0				)


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






'''simple docstring'''

import inspect
from typing import List, Optional, Tuple, Union

import torch

from ...models import UNetaDModel, VQModel
from ...schedulers import DDIMScheduler
from ...utils import randn_tensor
from ..pipeline_utils import DiffusionPipeline, ImagePipelineOutput






class    snake_case     (      lowercase_		):






				"""simple docstring"""



				def __init__(    self,     _lowercase,     _lowercase,     _lowercase       )     ->							List[Any]:
											super().__init__()
											self.register_modules(vqvae=_lowercase,     unet=_lowercase,     scheduler=_lowercase       )





				@torch.no_grad()
				def __call__(    self,     _lowercase = 1,     _lowercase = None,     _lowercase = 0.0,     _lowercase = 50,     _lowercase = "pil",     _lowercase = True,     **_lowercase,     )     ->							Union[Tuple, ImagePipelineOutput]:
											SCREAMING_SNAKE_CASE_				=				randn_tensor(
											    (batch_size, self.unet.config.in_channels, self.unet.config.sample_size, self.unet.config.sample_size),     generator=_lowercase,     )
											SCREAMING_SNAKE_CASE_				=				latents.to(self.device       )

											# scale the initial noise by the standard deviation required by the scheduler
											SCREAMING_SNAKE_CASE_				=				latents * self.scheduler.init_noise_sigma

											self.scheduler.set_timesteps(_lowercase       )

											# prepare extra kwargs for the scheduler step, since not all schedulers have the same signature
											SCREAMING_SNAKE_CASE_				=				'eta' in set(inspect.signature(self.scheduler.step       ).parameters.keys()       )

											SCREAMING_SNAKE_CASE_				=				{}
											if accepts_eta:
																		SCREAMING_SNAKE_CASE_				=				eta

											for t in self.progress_bar(self.scheduler.timesteps       ):
																		SCREAMING_SNAKE_CASE_				=				self.scheduler.scale_model_input(_lowercase,     _lowercase       )
																		# predict the noise residual
																		SCREAMING_SNAKE_CASE_				=				self.unet(_lowercase,     _lowercase       ).sample
																		# compute the previous noisy sample x_t -> x_t-1
																		SCREAMING_SNAKE_CASE_				=				self.scheduler.step(_lowercase,     _lowercase,     _lowercase,     **_lowercase       ).prev_sample

											# decode the image latents with the VAE
											SCREAMING_SNAKE_CASE_				=				self.vqvae.decode(_lowercase       ).sample

											SCREAMING_SNAKE_CASE_				=				(image / 2 + 0.5).clamp(0,     1       )
											SCREAMING_SNAKE_CASE_				=				image.cpu().permute(0,     2,     3,     1       ).numpy()
											if output_type == "pil":
																		SCREAMING_SNAKE_CASE_				=				self.numpy_to_pil(_lowercase       )

											if not return_dict:
																		return (image,)

											return ImagePipelineOutput(images=_lowercase       )





