



'''simple docstring'''
from typing import Callable, Optional, Union

from ...configuration_utils import PretrainedConfig
from ...utils import logging


_UpperCamelCase							 =	logging.get_logger(__name__)

_UpperCamelCase							 =	{
    '''microsoft/xprophetnet-large-wiki100-cased''': (
        '''https://huggingface.co/microsoft/xprophetnet-large-wiki100-cased/resolve/main/config.json'''
    ),
}



class _A     (			UpperCAmelCase__			):
		_SCREAMING_SNAKE_CASE    :			Optional[Any]  					=	"xlm-prophetnet"
		_SCREAMING_SNAKE_CASE    :			Union[str, Any]  					=	["past_key_values"]
		_SCREAMING_SNAKE_CASE    :			Union[str, Any]  					=	{
		    "num_attention_heads": "num_encoder_attention_heads",
		}





		def __init__(   self       ,				__UpperCAmelCase = 0.1       ,				__UpperCAmelCase = "gelu"       ,				__UpperCAmelCase = 30_522       ,				__UpperCAmelCase = 1_024       ,				__UpperCAmelCase = 4_096       ,				__UpperCAmelCase = 12       ,				__UpperCAmelCase = 16       ,				__UpperCAmelCase = 4_096       ,				__UpperCAmelCase = 12       ,				__UpperCAmelCase = 16       ,				__UpperCAmelCase = 0.1       ,				__UpperCAmelCase = 0.1       ,				__UpperCAmelCase = 512       ,				__UpperCAmelCase = 0.02       ,				__UpperCAmelCase = True       ,				__UpperCAmelCase = True       ,				__UpperCAmelCase = 0       ,				__UpperCAmelCase = 2       ,				__UpperCAmelCase = 32       ,				__UpperCAmelCase = 128       ,				__UpperCAmelCase = False       ,				__UpperCAmelCase = 0.0       ,				__UpperCAmelCase = True       ,				__UpperCAmelCase = 0       ,				__UpperCAmelCase = 1       ,				__UpperCAmelCase = 2       ,				**__UpperCAmelCase       ,				)				->   List[str]:

					'''simple docstring'''
					__UpperCAmelCase      :					Dict   =   vocab_size
					__UpperCAmelCase      :					Union[str, Any]   =   hidden_size
					__UpperCAmelCase      :					Optional[int]   =   encoder_ffn_dim
					__UpperCAmelCase      :					Tuple   =   num_encoder_layers
					__UpperCAmelCase      :					str   =   num_encoder_attention_heads
					__UpperCAmelCase      :					Dict   =   decoder_ffn_dim
					__UpperCAmelCase      :					List[Any]   =   num_decoder_layers
					__UpperCAmelCase      :					str   =   num_decoder_attention_heads
					__UpperCAmelCase      :					Any   =   max_position_embeddings
					__UpperCAmelCase      :					Union[str, Any]   =   init_std  # Normal(0, this parameter)
					__UpperCAmelCase      :					Tuple   =   activation_function

					# parameters for xlmprophetnet
					__UpperCAmelCase      :					List[Any]   =   ngram
					__UpperCAmelCase      :					Optional[int]   =   num_buckets
					__UpperCAmelCase      :					List[str]   =   relative_max_distance
					__UpperCAmelCase      :					List[Any]   =   disable_ngram_loss
					__UpperCAmelCase      :					Tuple   =   eps

					# 3 Types of Dropout
					__UpperCAmelCase      :					Any   =   attention_dropout
					__UpperCAmelCase      :					Tuple   =   activation_dropout
					__UpperCAmelCase      :					Optional[int]   =   dropout

					__UpperCAmelCase      :					Optional[Any]   =   use_cache

					super().__init__(
					    pad_token_id=lowerCamelCase__       ,				bos_token_id=lowerCamelCase__       ,				eos_token_id=lowerCamelCase__       ,				is_encoder_decoder=lowerCamelCase__       ,				add_cross_attention=lowerCamelCase__       ,				decoder_start_token_id=lowerCamelCase__       ,				**lowerCamelCase__       ,				)





		@property
		def 							__A				(   self )				->   int:

					'''simple docstring'''
					return self.num_encoder_layers + self.num_decoder_layers





		@num_hidden_layers.setter
		def 							__A				(   self       ,				__UpperCAmelCase )				->   str:

					'''simple docstring'''
					raise NotImplementedError(
					    """This model does not support the setting of `num_hidden_layers`. Please set `num_encoder_layers` and"""
					    """ `num_decoder_layers`.""" )








'''simple docstring'''


def        __lowerCAmelCase       (__lowerCAmelCase = 50      ):
		_UpperCAmelCase						:				Tuple	    =					[[0] * 3 for _ in range(length + 1      )]

		for row_length in range(length + 1      ):
				for tile_length in range(2					,       5      ):
						for tile_start in range(row_length - tile_length + 1      ):
								different_colour_ways_number[row_length][tile_length - 2] += (
								    different_colour_ways_number[row_length - tile_start - tile_length][
								        tile_length - 2
								    ]
								    + 1
								)

		return sum(different_colour_ways_number[length]      )


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



