def stable_marriage(suitors, suiteds):
    """ Construct a stable marriage between Suitors and Suiteds.

    Arguments:
        suitors: a list of Suitor
        suiteds: a list of Suited, which deferred acceptance of Suitors.

    Returns:
        A dict {Suitor: Suited} matching Suitors to Suiteds.
    """
    unassigned = set(suitors)

    while len(unassigned) > 0:
        for suitor in unassigned:
            next_to_propose_to = suiteds[suitor.preference()]
            next_to_propose_to.add_suitor(suitor)
        unassigned = set()

        for suited in suiteds:
            unassigned |= suited.reject()

        for suitor in unassigned:
            suitor.post_rejection()  # have some ice cream

    return dict([(suited.held, suited) for suited in suiteds])