old_contents: # Time:  O(1), per move.
  # Space: O(n^2)
  
  class TicTacToe(object):
  
      def __init__(self, n):
          """
          Initialize your data structure here.
          :type n: int
          """
          self.size = n
          self.__rows = [[0, 0] for _ in xrange(n)]
          self.__cols = [[0, 0] for _ in xrange(n)]
          self.__diagonal = [0, 0]
          self.__anti_diagonal = [0, 0]
          
  
      def move(self, row, col, player):
          """
          Player {player} makes a move at ({row}, {col}).
          @param row The row of the board.
          @param col The column of the board.
          @param player The player, can be either 1 or 2.
          @return The current winning condition, can be either:
                  0: No one wins.
                  1: Player 1 wins.
                  2: Player 2 wins.
          :type row: int
          :type col: int
          :type player: int
          :rtype: int
          """
          i = player - 1
          self.__rows[row][i] += 1
          self.__cols[col][i] += 1
          if row == col:
              self.__diagonal[i] += 1
          if col == len(self.__rows) - row - 1:
              self.__anti_diagonal[i] += 1
          if any([self.__rows[row][i] == self.size), \
                  self.__cols[col][i] == self.size, \
                  self.__diagonal[i] == self.size, \
                  self.__anti_diagonal[i] == self.size]):
              return player
  
          return 0
  
  
  # Your TicTacToe object will be instantiated and called as such:
  # obj = TicTacToe(n)
  # param_1 = obj.move(row,col,player)
  
new_contents: # Time:  O(1), per move.
  # Space: O(n^2)
  
  class TicTacToe(object):
  
      def __init__(self, n):
          """
          Initialize your data structure here.
          :type n: int
          """
          self.__size = n
          self.__rows = [[0, 0] for _ in xrange(n)]
          self.__cols = [[0, 0] for _ in xrange(n)]
          self.__diagonal = [0, 0]
          self.__anti_diagonal = [0, 0]
          
  
      def move(self, row, col, player):
          """
          Player {player} makes a move at ({row}, {col}).
          @param row The row of the board.
          @param col The column of the board.
          @param player The player, can be either 1 or 2.
          @return The current winning condition, can be either:
                  0: No one wins.
                  1: Player 1 wins.
                  2: Player 2 wins.
          :type row: int
          :type col: int
          :type player: int
          :rtype: int
          """
          i = player - 1
          self.__rows[row][i] += 1
          self.__cols[col][i] += 1
          if row == col:
              self.__diagonal[i] += 1
          if col == len(self.__rows) - row - 1:
              self.__anti_diagonal[i] += 1
          if any([self.__rows[row][i] == self.__size), \
                  self.__cols[col][i] == self.__size, \
                  self.__diagonal[i] == self.__size, \
                  self.__anti_diagonal[i] == self.__size]):
              return player
  
          return 0
  
  
  # Your TicTacToe object will be instantiated and called as such:
  # obj = TicTacToe(n)
  # param_1 = obj.move(row,col,player)
  
subject: Update design-tic-tac-toe.py