def min_max_prod(minimums, maximums):
    """
    returns the smallest and largest products achievable by interweaving maximums and minimums

    >>> min_max_prod((3,6,0,1,6),(-4,3,-5,-4,0))
    (-2880, 2160)
    """
    assert len(maximums) == len(minimums)

    ret_min, ret_max = 1, 1
    for op_min, op_max in zip(minimums, maximums):
        cands = (op_min * ret_min, op_min * ret_max, op_max * ret_min, op_max * ret_max)
        ret_min = min(cands)
        ret_max = max(cands)
    return ret_min, ret_max