import itertools


def list_flatten(l):
    """
    Flatten a complex nested list of nested lists into a flat list (DFS).
    For example, [ [1, 2], [[[2,3,4], [2,3,4]], [3,4,5, 'hello']]]
    will produce [1, 2, 2, 3, 4, 2, 3, 4, 3, 4, 5, 'hello']
    """
    return list(itertools.chain(*[list_flatten(j) if isinstance(j, list) else [j] for j in l]))