input: 
  class TicTacToe:
  
      def __init__(self):
          self.board = [['_' for _ in range(3)] 
                         for _ in range(3)]
          self.turn = 'x'
      
      def display(self):
          for row in self.board:
              print(' '.join(row))
  
      def check_win(self):
          board = self.board
  
          # check if the player with the current turn has a row of three
          for row in self.board:
              if row.count(self.turn) == 3:
                  return True
          
          # check if the player with the current turn has a column of three
          for col in range(3):
              if board[0][col] == board[1][col] and board[1][col] == board[2][col] and board[2][col] == self.turn:
                  return True
          
          # check for the two diagonals
          if board[0][0] == board[1][1] and board[1][1] == board[2][2] and board[2][2] == self.turn:
              return True
          if board[0][2] == board[1][1] and board[1][1] == board[2][0] and board[2][0] == self.turn:
              return True
          return False
  
  # Examples:
  # Initial game board:
  # >>> game = TicTacToe()
  # >>> game.display()
  # _ _ _
  # _ _ _
  # _ _ _
  
  # After one move (player 'x' at position (1,1)):
  # >>> game.board[1][1] = 'x'
  # >>> game.display()
  # _ _ _
  # _ x _
  # _ _ _
  
  # Checking if there's a win (no win condition):
  # >>> game.check_win()
  # False
  
  # Setting up a win condition (player 'x' completes a row):
  # >>> game.board[0][0] = 'x'
  # >>> game.board[0][1] = 'x'
  # >>> game.board[0][2] = 'x'
  # >>> game.display()
  # x x x
  # _ x _
  # _ _ _
  # >>> game.check_win()
  # True
  
output:     
      def make_move(self, row: int, col: int):
          if self.board[row][col] == '_':
              self.board[row][col] = self.turn
              if self.check_win():
                  print(f"Player {self.turn} wins!")
              self.turn = 'o' if self.turn == 'x' else 'x'
          else:
              print("Invalid move, try again.")
  
      def is_full(self):
          return all(cell != '_' for row in self.board for cell in row)
  
      def play(self):
          while not self.is_full():
              self.display()
              try:
                  row = int(input("Enter row (0, 1, 2): "))
                  col = int(input("Enter column (0, 1, 2): "))
                  self.make_move(row, col)
              except ValueError:
                  print("Invalid input, please enter integers between 0 and 2.")
          print("Game over, it's a draw!")
  