





'''simple docstring'''
from __future__ import annotations

class      snake_case     :




 """simple docstring"""



 def __init__(       self       :							Optional[int]							,	__A       :							list[list[int]]	):
        __UpperCamelCase       =  TypeError(
            'Matrices must be formed from a list of zero or more lists containing at '
            'least one and the same number of values, each of which must be of type '
            'int or float.'	)
        if len(__A	) != 0:
               __UpperCamelCase       =  len(rows[0]	)
               if cols == 0:
                      raise error
               for row in rows:
                      if len(__A	) != cols:
                             raise error
                      for value in row:
                             if not isinstance(__A							,	(int, float)	):
                                    raise error
               __UpperCamelCase       =  rows
        else:
               __UpperCamelCase       =  []






 def        _lowerCamelCase					(       self       :							int	):
        return [[row[i] for row in self.rows] for i in range(len(self.rows[0]	)	)]






 @property
 def        _lowerCamelCase					(       self       :							str	):
        return len(self.rows	)






 @property
 def        _lowerCamelCase					(       self       :							Any	):
        return len(self.rows[0]	)






 @property
 def        _lowerCamelCase					(       self       :							Optional[Any]	):
        return (self.num_rows, self.num_columns)






 @property
 def        _lowerCamelCase					(       self       :							Dict	):
        return self.order[0] == self.order[1]






 def        _lowerCamelCase					(       self       :							Any	):
        __UpperCamelCase       =  [
            [0 if column_num != row_num else 1 for column_num in range(self.num_rows	)]
            for row_num in range(self.num_rows	)
        ]
        return Matrix(__A	)






 def        _lowerCamelCase					(       self       :							Any	):
        if not self.is_square:
               return 0
        if self.order == (0, 0):
               return 1
        if self.order == (1, 1):
               return int(self.rows[0][0]	)
        if self.order == (2, 2):
               return int(
                   (self.rows[0][0] * self.rows[1][1])
                   - (self.rows[0][1] * self.rows[1][0])	)
        else:
               return sum(
                   self.rows[0][column] * self.cofactors().rows[0][column]
                   for column in range(self.num_columns	)	)






 def        _lowerCamelCase					(       self       :							List[str]	):
        return bool(self.determinant()	)






 def        _lowerCamelCase					(       self       :							Dict							,	__A       :							int							,	__A       :							int	):
        __UpperCamelCase       =  [
            [
                self.rows[other_row][other_column]
                for other_column in range(self.num_columns	)
                if other_column != column
            ]
            for other_row in range(self.num_rows	)
            if other_row != row
        ]
        return Matrix(__A	).determinant()






 def        _lowerCamelCase					(       self       :							Dict							,	__A       :							int							,	__A       :							int	):
        if (row + column) % 2 == 0:
               return self.get_minor(__A							,	__A	)
        return -1 * self.get_minor(__A							,	__A	)






 def        _lowerCamelCase					(       self       :							List[str]	):
        return Matrix(
            [
                [self.get_minor(__A							,	__A	) for column in range(self.num_columns	)]
                for row in range(self.num_rows	)
            ]	)






 def        _lowerCamelCase					(       self       :							Union[str, Any]	):
        return Matrix(
            [
                [
                    self.minors().rows[row][column]
                    if (row + column) % 2 == 0
                    else self.minors().rows[row][column] * -1
                    for column in range(self.minors().num_columns	)
                ]
                for row in range(self.minors().num_rows	)
            ]	)






 def        _lowerCamelCase					(       self       :							List[str]	):
        __UpperCamelCase       =  [
            [self.cofactors().rows[column][row] for column in range(self.num_columns	)]
            for row in range(self.num_rows	)
        ]
        return Matrix(__A	)






 def        _lowerCamelCase					(       self       :							Dict	):
        __UpperCamelCase       =  self.determinant()
        if not determinant:
               raise TypeError('Only matrices with a non-zero determinant have an inverse'	)
        return self.adjugate() * (1 / determinant)






 def __repr__(       self       :							Optional[Any]	):
        return str(self.rows	)






 def __str__(       self       :							Union[str, Any]	):
        if self.num_rows == 0:
               return "[]"
        if self.num_rows == 1:
               return "[[" + ". ".join(str(self.rows[0]	)	) + "]]"
        return (
            "["
            + "\n ".join(
                [
                    '[' + '. '.join([str(__A	) for value in row]	) + '.]'
                    for row in self.rows
                ]	)
            + "]"
        )






 def        _lowerCamelCase					(       self       :							List[Any]							,	__A       :							list[int]							,	__A       :							int | None = None	):
        __UpperCamelCase       =  TypeError('Row must be a list containing all ints and/or floats'	)
        if not isinstance(__A							,	__A	):
               raise type_error
        for value in row:
               if not isinstance(__A							,	(int, float)	):
                      raise type_error
        if len(__A	) != self.num_columns:
               raise ValueError(
                   'Row must be equal in length to the other rows in the matrix'	)
        if position is None:
               self.rows.append(__A	)
        else:
               __UpperCamelCase       =  self.rows[0:position] + [row] + self.rows[position:]






 def        _lowerCamelCase					(       self       :							Optional[Any]							,	__A       :							list[int]							,	__A       :							int | None = None	):
        __UpperCamelCase       =  TypeError(
            'Column must be a list containing all ints and/or floats'	)
        if not isinstance(__A							,	__A	):
               raise type_error
        for value in column:
               if not isinstance(__A							,	(int, float)	):
                      raise type_error
        if len(__A	) != self.num_rows:
               raise ValueError(
                   'Column must be equal in length to the other columns in the matrix'	)
        if position is None:
               __UpperCamelCase       =  [self.rows[i] + [column[i]] for i in range(self.num_rows	)]
        else:
               __UpperCamelCase       =  [
                   self.rows[i][0:position] + [column[i]] + self.rows[i][position:]
                   for i in range(self.num_rows	)
               ]






 def __eq__(       self       :							Tuple							,	__A       :							object	):
        if not isinstance(__A							,	__A	):
               return NotImplemented
        return self.rows == other.rows






 def __ne__(       self       :							Any							,	__A       :							object	):
        return not self == other






 def __neg__(       self       :							List[Any]	):
        return self * -1






 def __add__(       self       :							List[str]							,	__A       :							Matrix	):
        if self.order != other.order:
               raise ValueError('Addition requires matrices of the same order'	)
        return Matrix(
            [
                [self.rows[i][j] + other.rows[i][j] for j in range(self.num_columns	)]
                for i in range(self.num_rows	)
            ]	)






 def __sub__(       self       :							str							,	__A       :							Matrix	):
        if self.order != other.order:
               raise ValueError('Subtraction requires matrices of the same order'	)
        return Matrix(
            [
                [self.rows[i][j] - other.rows[i][j] for j in range(self.num_columns	)]
                for i in range(self.num_rows	)
            ]	)






 def __mul__(       self       :							str							,	__A       :							Matrix | int | float	):
        if isinstance(__A							,	(int, float)	):
               return Matrix(
                   [[int(element * other	) for element in row] for row in self.rows]	)
        elif isinstance(__A							,	__A	):
               if self.num_columns != other.num_rows:
                      raise ValueError(
                          'The number of columns in the first matrix must '
                          'be equal to the number of rows in the second'	)
               return Matrix(
                   [
                       [Matrix.dot_product(__A							,	__A	) for column in other.columns()]
                       for row in self.rows
                   ]	)
        else:
               raise TypeError(
                   'A Matrix can only be multiplied by an int, float, or another matrix'	)






 def __pow__(       self       :							Union[str, Any]							,	__A       :							int	):
        if not isinstance(__A							,	__A	):
               raise TypeError('A Matrix can only be raised to the power of an int'	)
        if not self.is_square:
               raise ValueError('Only square matrices can be raised to a power'	)
        if other == 0:
               return self.identity()
        if other < 0:
               if self.is_invertable():
                      return self.inverse() ** (-other)
               raise ValueError(
                   'Only invertable matrices can be raised to a negative power'	)
        __UpperCamelCase       =  self
        for _ in range(other - 1	):
               result *= self
        return result






 @classmethod
 def        _lowerCamelCase					(       cls       :							Tuple							,	__A       :							list[int]							,	__A       :							list[int]	):
        return sum(row[i] * column[i] for i in range(len(__A	)	)	)


if __name__ == "__main__":
    import doctest

    doctest.testmod()




import sys

snake_case				:    int       				=     (
    '''73167176531330624919225119674426574742355349194934'''
    '''96983520312774506326239578318016984801869478851843'''
    '''85861560789112949495459501737958331952853208805511'''
    '''12540698747158523863050715693290963295227443043557'''
    '''66896648950445244523161731856403098711121722383113'''
    '''62229893423380308135336276614282806444486645238749'''
    '''30358907296290491560440772390713810515859307960866'''
    '''70172427121883998797908792274921901699720888093776'''
    '''65727333001053367881220235421809751254540594752243'''
    '''52584907711670556013604839586446706324415722155397'''
    '''53697817977846174064955149290862569321978468622482'''
    '''83972241375657056057490261407972968652414535100474'''
    '''82166370484403199890008895243450658541227588666881'''
    '''16427171479924442928230863465674813919123162824586'''
    '''17866458359124566529476545682848912883142607690042'''
    '''24219022671055626321111109370544217506941658960408'''
    '''07198403850962455444362981230987879927244284909188'''
    '''84580156166097919133875499200524063689912560717606'''
    '''05886116467109405077541002256983155200055935729725'''
    '''71636269561882670428252483600823257530420752963450'''
)
def 				__lowerCamelCase						( UpperCAmelCase_						:		str = N						):




      """simple docstring"""





      a						:Optional[Any] 							=       -sys.maxsize - 1
      for i in range(len(UpperCAmelCase_						) - 12						):
            a						:Dict 							=       1
            for j in range(13						):
                  product *= int(n[i + j]						)
            if product > largest_product:
                  a						:str 							=       product
      return largest_product


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





