





import os






def 		lowerCAmelCase  (	UpperCamelCase__   :   str					)      ->    List[str]:

						"""simple docstring"""





						__SCREAMING_SNAKE_CASE:				int           =   len(grid[0]					)
						__SCREAMING_SNAKE_CASE:				List[str]           =   len(__UpperCAmelCase					)

						__SCREAMING_SNAKE_CASE:				Optional[Any]           =   0
						__SCREAMING_SNAKE_CASE:				List[Any]           =   0
						__SCREAMING_SNAKE_CASE:				Union[str, Any]           =   0

						# Check vertically, horizontally, diagonally at the same time (only works
						# for nxn grid)
						for i in range(__UpperCAmelCase					):
												for j in range(n_rows - 3					):
																		__SCREAMING_SNAKE_CASE:				Union[str, Any]           =   grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i]
																		__SCREAMING_SNAKE_CASE:				List[str]           =   grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3]

																		# Left-to-right diagonal (\) product
																		if i < n_columns - 3:
																								__SCREAMING_SNAKE_CASE:				List[Any]           =   (
																								    grid[i][j]
																								    * grid[i + 1][j + 1]
																								    * grid[i + 2][j + 2]
																								    * grid[i + 3][j + 3]
																								)

																		# Right-to-left diagonal(/) product
																		if i > 2:
																								__SCREAMING_SNAKE_CASE:				Union[str, Any]           =   (
																								    grid[i][j]
																								    * grid[i - 1][j + 1]
																								    * grid[i - 2][j + 2]
																								    * grid[i - 3][j + 3]
																								)

																		__SCREAMING_SNAKE_CASE:				Union[str, Any]           =   max(
																		    __UpperCAmelCase       ,			__UpperCAmelCase       ,			__UpperCAmelCase       ,			__UpperCAmelCase					)
																		if max_product > largest:
																								__SCREAMING_SNAKE_CASE:				Any           =   max_product

						return largest






def 		lowerCAmelCase  (	)      ->    Any:

						"""simple docstring"""





						__SCREAMING_SNAKE_CASE:				Dict           =   []
						with open(os.path.dirname(__UpperCAmelCase					) + '''/grid.txt'''					) as file:
												for line in file:
																		grid.append(line.strip('''\n'''					).split(''' '''					)					)

						__SCREAMING_SNAKE_CASE:				List[Any]           =   [[int(__UpperCAmelCase					) for i in grid[j]] for j in range(len(__UpperCAmelCase					)					)]

						return largest_product(__UpperCAmelCase					)


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









import os
from shutil import copyfile
from typing import List, Optional, Tuple

from ...tokenization_utils import AddedToken
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import is_sentencepiece_available, logging


if is_sentencepiece_available():
   from .tokenization_fnet import FNetTokenizer
else:
   lowerCamelCase__					:  Optional[Any]      							=				None

lowerCamelCase__					:  List[str]      							=				logging.get_logger(__name__)
lowerCamelCase__					:  List[str]      							=				{'vocab_file': 'spiece.model', 'tokenizer_file': 'tokenizer.json'}

lowerCamelCase__					:  List[str]      							=				{
    'vocab_file': {
        'google/fnet-base': 'https://huggingface.co/google/fnet-base/resolve/main/spiece.model',
        'google/fnet-large': 'https://huggingface.co/google/fnet-large/resolve/main/spiece.model',
    },
    'tokenizer_file': {
        'google/fnet-base': 'https://huggingface.co/google/fnet-base/resolve/main/tokenizer.json',
        'google/fnet-large': 'https://huggingface.co/google/fnet-large/resolve/main/tokenizer.json',
    },
}

lowerCamelCase__					:  Optional[Any]      							=				{
    'google/fnet-base': 512,
    'google/fnet-large': 512,
}

lowerCamelCase__					:  List[Any]      							=				'▁'





class 			lowerCamelCase_				( _SCREAMING_SNAKE_CASE   ):


 '''simple docstring'''







 lowercase_							       =       VOCAB_FILES_NAMES
 lowercase_							       =       PRETRAINED_VOCAB_FILES_MAP
 lowercase_							       =       PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
 lowercase_							       =       ["input_ids", "token_type_ids"]
 lowercase_							       =       FNetTokenizer



 def __init__(				self    :						List[Any]							,							_lowerCAmelCase    :						Dict=None							,							_lowerCAmelCase    :						Dict=None							,							_lowerCAmelCase    :						List[str]=False							,							_lowerCAmelCase    :						Optional[Any]=True							,							_lowerCAmelCase    :						Tuple=True							,							_lowerCAmelCase    :						List[Any]="<unk>"							,							_lowerCAmelCase    :						Optional[Any]="[SEP]"							,							_lowerCAmelCase    :						Optional[Any]="<pad>"							,							_lowerCAmelCase    :						Optional[int]="[CLS]"							,							_lowerCAmelCase    :						Optional[Any]="[MASK]"							,							**_lowerCAmelCase    :						Any							,							):
       # Mask token behave like a normal word, i.e. include the space before it and
       # is included in the raw text, there should be a match in a non-normalized sentence.
       SCREAMING_SNAKE_CASE_      		=     (
           AddedToken(_lowerCAmelCase							,							lstrip=_lowerCAmelCase							,							rstrip=_lowerCAmelCase							,							normalized=_lowerCAmelCase		)
           if isinstance(_lowerCAmelCase							,							_lowerCAmelCase		)
           else mask_token
       )

       super().__init__(
           _lowerCAmelCase							,							tokenizer_file=_lowerCAmelCase							,							do_lower_case=_lowerCAmelCase							,							remove_space=_lowerCAmelCase							,							keep_accents=_lowerCAmelCase							,							unk_token=_lowerCAmelCase							,							sep_token=_lowerCAmelCase							,							pad_token=_lowerCAmelCase							,							cls_token=_lowerCAmelCase							,							mask_token=_lowerCAmelCase							,							**_lowerCAmelCase							,							)

       SCREAMING_SNAKE_CASE_      		=     do_lower_case
       SCREAMING_SNAKE_CASE_      		=     remove_space
       SCREAMING_SNAKE_CASE_      		=     keep_accents
       SCREAMING_SNAKE_CASE_      		=     vocab_file
       SCREAMING_SNAKE_CASE_      		=     False if not self.vocab_file else True



 def  lowerCAmelCase_    (				self    :						Any							,							_lowerCAmelCase    :						List[int]							,							_lowerCAmelCase    :						Optional[List[int]] = None		):
       SCREAMING_SNAKE_CASE_      		=     [self.sep_token_id]
       SCREAMING_SNAKE_CASE_      		=     [self.cls_token_id]
       if token_ids_a is None:
             return cls + token_ids_a + sep
       return cls + token_ids_a + sep + token_ids_a + sep



 def  lowerCAmelCase_    (				self    :						Optional[int]							,							_lowerCAmelCase    :						List[int]							,							_lowerCAmelCase    :						Optional[List[int]] = None		):
       SCREAMING_SNAKE_CASE_      		=     [self.sep_token_id]
       SCREAMING_SNAKE_CASE_      		=     [self.cls_token_id]

       if token_ids_a is None:
             return len(cls + token_ids_a + sep		) * [0]
       return len(cls + token_ids_a + sep		) * [0] + len(token_ids_a + sep		) * [1]




 def  lowerCAmelCase_    (				self    :						Optional[Any]							,							_lowerCAmelCase    :						str							,							_lowerCAmelCase    :						Optional[str] = None		):
       if not os.path.isdir(_lowerCAmelCase		):
             logger.error(F"Vocabulary path ({save_directory}) should be a directory"		)
             return
       SCREAMING_SNAKE_CASE_      		=     os.path.join(
           _lowerCAmelCase							,							(filename_prefix + '-' if filename_prefix else '') + VOCAB_FILES_NAMES['vocab_file']		)

       if os.path.abspath(self.vocab_file		) != os.path.abspath(_lowerCAmelCase		):
             copyfile(self.vocab_file							,							_lowerCAmelCase		)

       return (out_vocab_file,)