def charset(source, lv_list):
    """Returns a set of all of the characters found in all of the expressions in
    the given language varieties in all of the denotations in all of the
    meanings in the source.
    
    Args:
        source: source. a list of Mns
        
        lv_list: a list of lvs (as str in the format xxx-###). can also consist
        of a single lv, which is automatically converted to a list of length 1

    Returns:
        Returns a set of single characters. 
        
    Examples:
        >>> charset(source, ['eng-000', 'hye-000'])
        {'a', 'b', ..., 'z', '-', ..., 'ա', 'բ', ..., 'օ', 'ֆ', ...}
        >>> charset(source, 'eng-000')
        {'a', 'b', ..., 'z', '-', ...}
    """

    if isinstance(lv_list, str):
        lv_list = [lv_list]
    outset = set()
    for mn in source:
        for lv in lv_list:
            for dn in mn(lv):
                for c in str(dn.ex):
                    outset.add(c)
    return outset