def find_shops(index: dict, products: list) -> set:
    """
    Find all the shops that contain all the products
    :param index: Index of products
    :param products: Products to match
    :return: Set of all shops that sell all mentioned products
    """
    try:
        final_set = index[products[0]]  # Initial initialization
        for i in products[1:]:  # All but first
            final_set.intersection_update(index[i])
        return final_set
    except KeyError:  # The item was not in any shop
        return set()