"""simple docstring"""



from math import factorial

SCREAMING_SNAKE_CASE__:List[str]			=	{str(digit): factorial(digit) for digit in range(10)}



def 					_lowerCamelCase(					a							):
       if not isinstance(_lowerCAmelCase ,  _lowerCAmelCase							):
              raise TypeError("Parameter number must be int"							)

       if number < 0:
              raise ValueError("Parameter number must be greater than or equal to 0"							)

       # Converts number in string to iterate on its digits and adds its factorial.
       return sum(DIGIT_FACTORIAL[digit] for digit in str(_lowerCAmelCase							)							)



def 					_lowerCamelCase(					a = 6_0 ,  a = 1_0_0_0_0_0_0							):

       if not isinstance(_lowerCAmelCase ,  _lowerCAmelCase							) or not isinstance(_lowerCAmelCase ,  _lowerCAmelCase							):
              raise TypeError("Parameters chain_length and number_limit must be int"							)

       if chain_length <= 0 or number_limit <= 0:
              raise ValueError(
                  "Parameters chain_length and number_limit must be greater than 0"							)

       # the counter for the chains with the exact desired length
       __a     				=  0
       # the cached sizes of the previous chains
       __a     				=  {}

       for start_chain_element in range(1 ,  _lowerCAmelCase							):
              # The temporary set will contain the elements of the chain
              __a     				=  set()
              __a     				=  0

              # Stop computing the chain when you find a cached size, a repeating item or the
              # length is greater then the desired one.
              __a     				=  start_chain_element
              while (
                  chain_element not in chain_sets_lengths
                  and chain_element not in chain_set
                  and chain_set_length <= chain_length
              ):
                     chain_set.add(_lowerCAmelCase							)
                     chain_set_length += 1
                     __a     				=  digit_factorial_sum(_lowerCAmelCase							)

              if chain_element in chain_sets_lengths:
                     chain_set_length += chain_sets_lengths[chain_element]

              __a     				=  chain_set_length

              # If chain contains the exact amount of elements increase the counter
              if chain_set_length == chain_length:
                     chains_counter += 1

       return chains_counter


if __name__ == "__main__":
   import doctest

   doctest.testmod()
   print(F'''{solution()}''')

"""simple docstring"""



import os



def 					_lowerCamelCase(					):
       with open(os.path.dirname(a							) + "/grid.txt"							) as f:
              __a     				=  []  # noqa: E741
              for _ in range(2_0							):
                     l.append([int(a							) for x in f.readline().split()]							)

              __a     				=  0

              # right
              for i in range(2_0							):
                     for j in range(1_7							):
                            __a     				=  l[i][j] * l[i][j + 1] * l[i][j + 2] * l[i][j + 3]
                            if temp > maximum:
                                   __a     				=  temp

        # down
              for i in range(1_7							):
                     for j in range(2_0							):
                            __a     				=  l[i][j] * l[i + 1][j] * l[i + 2][j] * l[i + 3][j]
                            if temp > maximum:
                                   __a     				=  temp

        # diagonal 1
              for i in range(1_7							):
                     for j in range(1_7							):
                            __a     				=  l[i][j] * l[i + 1][j + 1] * l[i + 2][j + 2] * l[i + 3][j + 3]
                            if temp > maximum:
                                   __a     				=  temp

        # diagonal 2
              for i in range(1_7							):
                     for j in range(3 ,  2_0							):
                            __a     				=  l[i][j] * l[i + 1][j - 1] * l[i + 2][j - 2] * l[i + 3][j - 3]
                            if temp > maximum:
                                   __a     				=  temp
              return maximum


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