





import inspect
import os
import unittest

import torch

import accelerate
from accelerate import Accelerator
from accelerate.test_utils import execute_subprocess_async, require_multi_gpu
from accelerate.utils import patch_environment



class    A__  (			unittest.TestCase     ):





      def 			__UpperCamelCase(					self  ):
       '''simple docstring'''




       UpperCamelCase      :   Optional[Any]			      =  inspect.getfile(accelerate.test_utils  )
       UpperCamelCase      :   List[str]			      =  os.path.sep.join(mod_file.split(os.path.sep  )[:-1] + ["scripts", "test_script.py"]  )
       UpperCamelCase      :   int			      =  os.path.sep.join(
           mod_file.split(os.path.sep  )[:-1] + ["scripts", "test_distributed_data_loop.py"]  )
       UpperCamelCase      :   Any			      =  os.path.sep.join(mod_file.split(os.path.sep  )[:-1] + ["scripts", "test_ops.py"]  )





      @require_multi_gpu
      def 			__UpperCamelCase(					self  ):
       '''simple docstring'''




       print(F"""Found {torch.cuda.device_count()} devices."""  )
       UpperCamelCase      :   Tuple			      =  ["torchrun", F"""--nproc_per_node={torch.cuda.device_count()}""", self.test_file_path]
       with patch_environment(omp_num_threads=1  ):
        execute_subprocess_async(A_			,				env=os.environ.copy()  )





      @require_multi_gpu
      def 			__UpperCamelCase(					self  ):
       '''simple docstring'''




       print(F"""Found {torch.cuda.device_count()} devices."""  )
       UpperCamelCase      :   Optional[Any]			      =  ["torchrun", F"""--nproc_per_node={torch.cuda.device_count()}""", self.operation_file_path]
       print(F"""Command: {cmd}"""  )
       with patch_environment(omp_num_threads=1  ):
        execute_subprocess_async(A_			,				env=os.environ.copy()  )





      @require_multi_gpu
      def 			__UpperCamelCase(					self  ):
       '''simple docstring'''




       UpperCamelCase      :   int			      =  ["torchrun", F"""--nproc_per_node={torch.cuda.device_count()}""", inspect.getfile(self.__class__  )]
       with patch_environment(omp_num_threads=1  ):
        execute_subprocess_async(A_			,				env=os.environ.copy()  )





      @require_multi_gpu
      def 			__UpperCamelCase(					self  ):
       '''simple docstring'''




       print(F"""Found {torch.cuda.device_count()} devices, using 2 devices only"""  )
       UpperCamelCase      :   List[Any]			      =  ["torchrun", F"""--nproc_per_node={torch.cuda.device_count()}""", self.data_loop_file_path]
       with patch_environment(omp_num_threads=1			,				cuda_visible_devices="0,1"  ):
        execute_subprocess_async(A_			,				env=os.environ.copy()  )


if __name__ == "__main__":
    __lowerCamelCase			:	List[Any]					    =	Accelerator()
    __lowerCamelCase			:	Any					    =	(accelerator.state.process_index + 2, 10)
    __lowerCamelCase			:	Optional[int]					    =	torch.randint(0, 10, shape).to(accelerator.device)

    __lowerCamelCase			:	Tuple					    =	""""""

    __lowerCamelCase			:	List[Any]					    =	accelerator.pad_across_processes(tensor)
    if tensora.shape[0] != accelerator.state.num_processes + 1:
        error_msg += f"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
    if not torch.equal(tensora[: accelerator.state.process_index + 2], tensor):
        error_msg += "Tensors have different values."
    if not torch.all(tensora[accelerator.state.process_index + 2 :] == 0):
        error_msg += "Padding was not done with the right value (0)."

    __lowerCamelCase			:	Dict					    =	accelerator.pad_across_processes(tensor, pad_first=True)
    if tensora.shape[0] != accelerator.state.num_processes + 1:
        error_msg += f"Found shape {tensora.shape} but should have {accelerator.state.num_processes + 1} at dim 0."
    __lowerCamelCase			:	List[str]					    =	accelerator.state.num_processes - accelerator.state.process_index - 1
    if not torch.equal(tensora[index:], tensor):
        error_msg += "Tensors have different values."
    if not torch.all(tensora[:index] == 0):
        error_msg += "Padding was not done with the right value (0)."

    # Raise error at the end to make sure we don't stop at the first failure.
    if len(error_msg) > 0:
        raise ValueError(error_msg)







import os



def 						A_							(	)		->					Union[str, Any]:
 with open(os.path.dirname(_lowerCAmelCase	) + "/grid.txt"	) as f:
  UpperCamelCase      :   Optional[Any]			      =  []  # noqa: E741
  for _ in range(20	):
   l.append([int(_lowerCAmelCase	) for x in f.readline().split()]	)

  UpperCamelCase      :   str			      =  0

  # right
  for i in range(20	):
   for j in range(17	):
    UpperCamelCase      :   int			      =  l[i][j] * l[i][j + 1] * l[i][j + 2] * l[i][j + 3]
    if temp > maximum:
     UpperCamelCase      :   List[Any]			      =  temp

        # down
  for i in range(17	):
   for j in range(20	):
    UpperCamelCase      :   List[str]			      =  l[i][j] * l[i + 1][j] * l[i + 2][j] * l[i + 3][j]
    if temp > maximum:
     UpperCamelCase      :   List[str]			      =  temp

        # diagonal 1
  for i in range(17	):
   for j in range(17	):
    UpperCamelCase      :   Any			      =  l[i][j] * l[i + 1][j + 1] * l[i + 2][j + 2] * l[i + 3][j + 3]
    if temp > maximum:
     UpperCamelCase      :   Tuple			      =  temp

        # diagonal 2
  for i in range(17	):
   for j in range(3				,  20	):
    UpperCamelCase      :   Tuple			      =  l[i][j] * l[i + 1][j - 1] * l[i + 2][j - 2] * l[i + 3][j - 3]
    if temp > maximum:
     UpperCamelCase      :   List[Any]			      =  temp
  return maximum


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