def find_dead_end_reactions(model):
    """
    Identify reactions that are structurally prevented from carrying flux (dead ends).
    """
    stoichiometries = {}
    for reaction in model.reactions:
        for met, coef in reaction.metabolites.items():
            stoichiometries.setdefault(met.id, {})[reaction] = coef

    blocked_reactions = set()
    while True:
        new_blocked = set()
        for met_id, stoichiometry in stoichiometries.items():
            if len(stoichiometry) == 1:  # Metabolite is only associated with 1 reaction, which can thus not be active
                new_blocked.add(list(stoichiometry)[0])
        if len(new_blocked) == 0:
            break  # No more blocked reactions

        # Remove blocked reactions from stoichiometries
        stoichiometries = {
            met_id: {reac: coef for reac, coef in stoichiometry.items() if reac not in new_blocked}
            for met_id, stoichiometry in stoichiometries.items()}
        blocked_reactions.update(new_blocked)

    return frozenset(blocked_reactions)