





'''simple docstring'''




import os






def        _lowerCAmelCase			(  __snake_case  : List[str]			)     ->     str:
     __A						: List[Any]      =       len(grid[0]			)
     __A						: Dict      =       len(__snake_case			)

     __A						: str      =       0
     __A						: Tuple      =       0
     __A						: List[Any]      =       0

     # Check vertically, horizontally, diagonally at the same time (only works
     # for nxn grid)
     for i in range(__snake_case			):
          for j in range(n_rows - 3			):
               __A						: Union[str, Any]      =       grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i]
               __A						: Any      =       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:
                    __A						: int      =       (
                        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:
                    __A						: List[str]      =       (
                        grid[i][j]
                        * grid[i - 1][j + 1]
                        * grid[i - 2][j + 2]
                        * grid[i - 3][j + 3]
                    )

               __A						: Tuple      =       max(
                   __snake_case ,							__snake_case ,							__snake_case ,							__snake_case			)
               if max_product > largest:
                    __A						: Union[str, Any]      =       max_product

     return largest






def        _lowerCAmelCase			(  )     ->     Union[str, Any]:
     __A						: Tuple      =       []
     with open(os.path.dirname(__snake_case			) + '/grid.txt'			) as file:
          for line in file:
               grid.append(line.strip('\n'			).split(' '			)			)

     __A						: Optional[int]      =       [[int(__snake_case			) for i in grid[j]] for j in range(len(__snake_case			)			)]

     return largest_product(__snake_case			)


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






'''simple docstring'''




from typing import List, Optional, Union

from ...image_utils import ImageInput
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType


class  SCREAMING_SNAKE_CASE    (a__							):
     lowerCAmelCase					=       ['''image_processor''', '''tokenizer''']
     lowerCAmelCase					=       '''BlipImageProcessor'''
     lowerCAmelCase					=       ('''BertTokenizer''', '''BertTokenizerFast''')


     def __init__(						self						,	_UpperCAmelCase						,	_UpperCAmelCase):

          '''simple docstring'''






          __A						: int      =       False
          super().__init__(_UpperCAmelCase						,	_UpperCAmelCase)
          __A						: Optional[int]      =       self.image_processor


     def __call__(						self						,	_UpperCAmelCase = None						,	_UpperCAmelCase = None						,	_UpperCAmelCase = True						,	_UpperCAmelCase = False						,	_UpperCAmelCase = None						,	_UpperCAmelCase = None						,	_UpperCAmelCase = 0						,	_UpperCAmelCase = None						,	_UpperCAmelCase = None						,	_UpperCAmelCase = False						,	_UpperCAmelCase = False						,	_UpperCAmelCase = False						,	_UpperCAmelCase = False						,	_UpperCAmelCase = False						,	_UpperCAmelCase = True						,	_UpperCAmelCase = None						,	**_UpperCAmelCase						,	):

          '''simple docstring'''






          if images is None and text is None:
               raise ValueError('You have to specify either images or text.')

          # Get only text
          if images is None:
               __A						: int      =       self.tokenizer
               __A						: Optional[Any]      =       self.tokenizer(
                   text=_UpperCAmelCase						,	add_special_tokens=_UpperCAmelCase						,	padding=_UpperCAmelCase						,	truncation=_UpperCAmelCase						,	max_length=_UpperCAmelCase						,	stride=_UpperCAmelCase						,	pad_to_multiple_of=_UpperCAmelCase						,	return_attention_mask=_UpperCAmelCase						,	return_overflowing_tokens=_UpperCAmelCase						,	return_special_tokens_mask=_UpperCAmelCase						,	return_offsets_mapping=_UpperCAmelCase						,	return_token_type_ids=_UpperCAmelCase						,	return_length=_UpperCAmelCase						,	verbose=_UpperCAmelCase						,	return_tensors=_UpperCAmelCase						,	**_UpperCAmelCase						,	)
               return text_encoding

          # add pixel_values
          __A						: List[Any]      =       self.image_processor(_UpperCAmelCase						,	return_tensors=_UpperCAmelCase)

          if text is not None:
               __A						: Optional[Any]      =       self.tokenizer(
                   text=_UpperCAmelCase						,	add_special_tokens=_UpperCAmelCase						,	padding=_UpperCAmelCase						,	truncation=_UpperCAmelCase						,	max_length=_UpperCAmelCase						,	stride=_UpperCAmelCase						,	pad_to_multiple_of=_UpperCAmelCase						,	return_attention_mask=_UpperCAmelCase						,	return_overflowing_tokens=_UpperCAmelCase						,	return_special_tokens_mask=_UpperCAmelCase						,	return_offsets_mapping=_UpperCAmelCase						,	return_token_type_ids=_UpperCAmelCase						,	return_length=_UpperCAmelCase						,	verbose=_UpperCAmelCase						,	return_tensors=_UpperCAmelCase						,	**_UpperCAmelCase						,	)
          else:
               __A						: int      =       None

          if text_encoding is not None:
               encoding_image_processor.update(_UpperCAmelCase)

          return encoding_image_processor


     def 							SCREAMING_SNAKE_CASE  (						self						,	*_UpperCAmelCase						,	**_UpperCAmelCase):

          '''simple docstring'''






          return self.tokenizer.batch_decode(*_UpperCAmelCase						,	**_UpperCAmelCase)


     def 							SCREAMING_SNAKE_CASE  (						self						,	*_UpperCAmelCase						,	**_UpperCAmelCase):

          '''simple docstring'''






          return self.tokenizer.decode(*_UpperCAmelCase						,	**_UpperCAmelCase)


     @property
     def 							SCREAMING_SNAKE_CASE  (						self):

          '''simple docstring'''






          __A						: List[str]      =       self.tokenizer.model_input_names
          __A						: Tuple      =       self.image_processor.model_input_names
          return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names))