input: class Matrix: 
      def __init__(self, m, n, lst): 
          self.m = m             
          self.n = n             
          self.mat = [] 
    
          c = 0
          for i in range(self.m): 
              a =[] 
              for j in range(self.n): 
                      a.append(lst[c]) 
                      c += 1
              self.mat.append(a) 
    
      def __str__(self): 
          output = ""
          for i in self.mat: 
              for j in i: 
                  output += str(j) + " "
              output += '\n'
          return output 
    
      def add(self, mat2): 
          for i in range(self.m): 
              for j in range(self.n): 
                  self.mat[i][j] += mat2.mat[i][j] 
    
      def sub(self, mat2): 
          for i in range(self.m): 
              for j in range(self.n): 
                  self.mat[i][j] -= mat2.mat[i][j]
      
      def mul(self, mat2): 
          result = [] 
          for i in range(self.m): 
              a =[] 
              for j in range(mat2.n): 
                  s = 0
                  for k in range(self.n): 
                      s += self.mat[i][k] * mat2.mat[k][j] 
                  a.append(s) 
              result.append(a) 
          self.mat = result 
          self.m = len(result) 
          self.n = len(result[0]) 
    
      def transpose(self):
          result = [[self.mat[j][i] for j in range(len(self.mat))] for i in range(len(self.mat[0]))]
          self.mat = result 
          self.m = len(result) 
          self.n = len(result[0])
      # Example Test Case:
      # Matrix(2, 2, [1, 2, 3, 4]) # Creates a 2x2 matrix [[1, 2], [3, 4]]
      # Matrix(2, 2, [5, 6, 7, 8]) # Creates another 2x2 matrix [[5, 6], [7, 8]]
      # Use the `add` method to add the two matrices.
      # Use the `sub` method to subtract the second matrix from the first.
      # Use the `mul` method to multiply the first matrix by the second.
      # Use the `transpose` method to transpose the first matrix.
      # Expected Output for each operation:
      # For addition: [[6, 8], [10, 12]]
      # For subtraction: [[-4, -4], [-4, -4]]
      # For multiplication: [[19, 22], [43, 50]]
      # For transpose: [[1, 3], [2, 4]]
output:     
      def __eq__(self, other):
          if self.m != other.m or self.n != other.n:
              return False
          for i in range(self.m):
              for j in range(self.n):
                  if self.mat[i][j] != other.mat[i][j]:
                      return False
          return True
  