def print_board(board):
    print("\n")
    for i in range(3):
        print(" | ".join(board[i*3:(i+1)*3]))
        if i < 2:
            print("---------")
    print("\n")

def check_win(board):
    # Check rows
    for i in range(0, 9, 3):
        if board[i] == board[i+1] == board[i+2] != ' ':
            return board[i]
    # Check columns
    for i in range(3):
        if board[i] == board[i+3] == board[i+6] != ' ':
            return board[i]
    # Check diagonals
    if board[0] == board[4] == board[8] != ' ':
        return board[0]
    if board[2] == board[4] == board[6] != ' ':
        return board[2]
    return None

def check_draw(board):
    return ' ' not in board

def get_move(player, board):
    while True:
        try:
            move = int(input(f"Player {player}, enter your move (1-9): "))
            if move < 1 or move > 9:
                print("Please enter a number between 1 and 9.")
                continue
            if board[move-1] != ' ':
                print("That position is already taken. Choose another.")
                continue
            return move-1
        except ValueError:
            print("Please enter a valid number.")

def main():
    board = [' '] * 9
    current_player = 'X'
    
    while True:
        print_board(board)
        move = get_move(current_player, board)
        board[move] = current_player
        
        winner = check_win(board)
        if winner:
            print_board(board)
            print(f"Player {winner} wins!")
            break
            
        if check_draw(board):
            print_board(board)
            print("It's a draw!")
            break
            
        current_player = 'O' if current_player == 'X' else 'X'

if __name__ == "__main__":
    main()
