Ignore:
        %timeit len(reduce(set.union, map(set, x)))
        %timeit len(ut.union(*x))
        %timeit len(ut.unique(ut.flatten(ut.lmap(np.unique, x))))
        %timeit len(ut.unique(ut.flatten(x)))
        %timeit len(ut.union(*x))
        %timeit len(ut.list_union(*x))
        %timeit len(set.union(*[set(list_) for list_ in lists]))
        %timeit len(set.union(*(set(list_) for list_ in lists)))

def union(*lists, **kwargs):
    """
    Ignore:
        %timeit len(reduce(set.union, map(set, x)))
        %timeit len(ut.union(*x))
        %timeit len(ut.unique(ut.flatten(ut.lmap(np.unique, x))))
        %timeit len(ut.unique(ut.flatten(x)))
        %timeit len(ut.union(*x))
        %timeit len(ut.list_union(*x))
        %timeit len(set.union(*[set(list_) for list_ in lists]))
        %timeit len(set.union(*(set(list_) for list_ in lists)))
    """
    if kwargs.get('ordered', True):
        return union_ordered(*lists)
    else:
        return list_union(*lists)