def gen_all_holds(hand):
    """
    Generate all possible choices of dice from hand to hold.

    hand: full yahtzee hand

    Returns a set of tuples, where each tuple is dice to hold
    """
    all_holds = set([()])

    for dice in hand:
        for subset in set(all_holds):
            nxt_subset = list(subset)
            nxt_subset.append(dice)
            nxt_subset.sort()
            all_holds.add(tuple(nxt_subset))
    
    return all_holds