def METHOD_NAME(self, useroutput: UserOutput):
    self.useroutput = useroutput
    check_hint_status = {
        loc: check.get("hint") for loc, check in self.areas.checks.items()
    }
    # ensure prerandomized and banned locations cannot be hinted
    not_banned = self.logic.fill_restricted()
    banned_locs = [
        loc
        for loc, check in self.areas.checks.items()
        if not not_banned[check["req_index"]]
    ]
    unhintables = (
        banned_locs + self.logic.known_locations + [START_ITEM, UNPLACED_ITEM]
    )
    non_hintstone_hints, hinted_checks = self.do_non_hintstone_hints()
    self.dist.start(
        self.areas,
        self.options,
        self.logic,
        self.rng,
        unhintables + hinted_checks,
        check_hint_status,
    )
    fi_hints, hintstone_hints = self.dist.get_hints()
    self.useroutput.progress_callback("placing hints...")
    hintstone_hints = {
        hintname: hint for hint, hintname in zip(hintstone_hints, HINTS)
    }
    self.hints_per_stone = self.dist.hints_per_stone
    self.randomize(hintstone_hints)
    placed_fi_hints = {FI_HINTS_KEY: FiHintWrapper(fi_hints)}
    placed_hintstone_hints = {
        stone: GossipStoneHintWrapper(
            [
                hintstone_hints[hintname]
                for hintname in self.logic.placement.stones[stone]
            ]
        )
        for stone in self.areas.gossip_stones
    }
    self.logic.placement.hints = (
        placed_fi_hints | placed_hintstone_hints | non_hintstone_hints
    )