old_contents: # Time:  O(n)
  # Space: O(1)
  
  # Given a binary matrix A, we want to flip the image horizontally,
  # then invert it, and return the resulting image.
  #
  # To flip an image horizontally means that each row of the image is reversed.
  # For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
  #
  # To invert an image means that each 0 is replaced by 1, and each 1 is
  # replaced by 0.
  # For example, inverting [0, 1, 1] results in [1, 0, 0].
  #
  # Example 1:
  #
  # Input: [[1,1,0],[1,0,1],[0,0,0]]
  # Output: [[1,0,0],[0,1,0],[1,1,1]]
  # Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
  # Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
  # Example 2:
  #
  # Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
  # Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
  # Explanation: First reverse each row:
  #              [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
  # Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
  #
  # Notes:
  # 1. 1 <= A.length = A[0].length <= 20
  # 2. 0 <= A[i][j] <= 1
  
  try:
      xrange          # Python 2
  except NameError:
      xrange = range  # Python 3
  
  
  class Solution(object):
      def flipAndInvertImage(self, A):
          """
          :type A: List[List[int]]
          :rtype: List[List[int]]
          """
          for row in A:
              for i in xrange((len(row)+1) // 2):
                  row[i], row[~i] = row[~i] ^ 1, row[i] ^ 1
          return A
  
new_contents: # Time:  O(n^2)
  # Space: O(1)
  
  # Given a binary matrix A, we want to flip the image horizontally,
  # then invert it, and return the resulting image.
  #
  # To flip an image horizontally means that each row of the image is reversed.
  # For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].
  #
  # To invert an image means that each 0 is replaced by 1, and each 1 is
  # replaced by 0.
  # For example, inverting [0, 1, 1] results in [1, 0, 0].
  #
  # Example 1:
  #
  # Input: [[1,1,0],[1,0,1],[0,0,0]]
  # Output: [[1,0,0],[0,1,0],[1,1,1]]
  # Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
  # Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]
  # Example 2:
  #
  # Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
  # Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
  # Explanation: First reverse each row:
  #              [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
  # Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
  #
  # Notes:
  # 1. 1 <= A.length = A[0].length <= 20
  # 2. 0 <= A[i][j] <= 1
  
  try:
      xrange          # Python 2
  except NameError:
      xrange = range  # Python 3
  
  
  class Solution(object):
      def flipAndInvertImage(self, A):
          """
          :type A: List[List[int]]
          :rtype: List[List[int]]
          """
          for row in A:
              for i in xrange((len(row)+1) // 2):
                  row[i], row[~i] = row[~i] ^ 1, row[i] ^ 1
          return A
  
subject: Update flipping-an-image.py