def print_board(board):
    """Prints the current state of the board."""
    print(f"\n {board[0]} | {board[1]} | {board[2]} ")
    print("---+---+---")
    print(f" {board[3]} | {board[4]} | {board[5]} ")
    print("---+---+---")
    print(f" {board[6]} | {board[7]} | {board[8]} \n")

def check_winner(board, player):
    """Checks if the specified player has won."""
    # Check rows
    for i in range(0, 9, 3):
        if board[i] == board[i+1] == board[i+2] == player:
            return True
    # Check columns
    for i in range(3):
        if board[i] == board[i+3] == board[i+6] == player:
            return True
    # Check diagonals
    if board[0] == board[4] == board[8] == player:
        return True
    if board[2] == board[4] == board[6] == player:
        return True
    return False

def is_board_full(board):
    """Checks if the board is full (no numbers left)."""
    return all(cell in ['X', 'O'] for cell in board)

def main():
    # Initialize board with numbers 1-9 to guide player input
    board = [str(i) for i in range(1, 10)]
    current_player = 'X'
    
    while True:
        print_board(board)
        
        # Get valid move
        while True:
            try:
                move_input = input(f"Player {current_player}, enter your move (1-9): ")
                move = int(move_input)
                
                if 1 <= move <= 9:
                    # Check if cell is already taken
                    if board[move - 1] not in ['X', 'O']:
                        board[move - 1] = current_player
                        break
                    else:
                        print("That cell is already occupied. Try again.")
                else:
                    print("Please enter a number between 1 and 9.")
            except ValueError:
                print("Invalid input. Please enter a number.")
        
        # Check for win
        if check_winner(board, current_player):
            print_board(board)
            print(f"Player {current_player} wins!")
            break
        
        # Check for draw
        if is_board_full(board):
            print_board(board)
            print("It's a draw!")
            break
        
        # Switch player
        current_player = 'O' if current_player == 'X' else 'X'

if __name__ == "__main__":
    main()
