```python
def plotter_pose(program: str) -> dict:
    if not isinstance(program, str):
        raise ValueError("Invalid input: program must be a string")
    
    directions = {"N": (0, 1), "E": (1, 0), "S": (0, -1), "W": (-1, 0)}
    position = (0, 0)
    facing = "N"
    
    for char in program:
        if char == "L":
            facing = directions[facing][2] if facing == "N" else directions[facing][3]
        elif char == "R":
            facing = directions[facing][1] if facing == "N" else directions[facing][0]
        elif char == "F" or char == "B":
            distance_str = ""
            i = program.index(char) + 1
            while i < len(program) and program[i].isdigit():
                distance_str += program[i]
                i += 1
            if not distance_str:
                raise ValueError(f"Invalid input: {char} must be followed by digits")
            distance = int(distance_str)
            if not (1 <= distance):
                raise ValueError(f"Invalid input: drive distance must be at least 1, got {distance}")
            
            move_x, move_y = directions[facing]
            if char == "B":
                move_x *= -1
                move_y *= -1
            
            position = (position[0] + move_x * distance, position[1] + move_y * distance)
        else:
            raise ValueError(f"Invalid input: unrecognized command '{char}'")
    
    return {"x": position[0], "y": position[1], "facing": facing}
```