def intersection(lists):
    """
        lists must contain lists of elements or a lists of strings then strings.
    """
    if lists is None or len(lists) == 0 or lists[0] is None:
        return []
    elif len(lists) == 1:
        return lists[0]
    else:
        theIntersection = list(lists[0])
        for current in lists[1:]:
            if current is None:
                theIntersection = []
                break
            elif isinstance(current, str):
                currentInter = []
                for el in theIntersection:
                    if el in current:
                        currentInter.append(el)
                theIntersection = currentInter
                theIntersection = list(set(theIntersection))
            else:
                theIntersection = list(set(current).intersection(
                    theIntersection))
        return theIntersection
