
    Given a sequence of daily user engagement metrics where positive values represent positive interactions and negative values represent negative interactions, find the time period that generated the highest viral multiplication effect in the social network. The viral multiplication effect for a time period is calculated as the product of engagement scores for consecutive days within that period, and your task is to identify the period with the maximum viral impact.
    

    
def max_subarray_product(arr):
    """
    Given a sequence of daily user engagement metrics where positive values represent positive interactions and negative values represent negative interactions, find the time period that generated the highest viral multiplication effect in the social network. The viral multiplication effect for a time period is calculated as the product of engagement scores for consecutive days within that period, and your task is to identify the period with the maximum viral impact.
    

    """
def max_subarray_product(arr):
    """
    Given a sequence of daily user engagement metrics where positive values represent positive interactions and negative values represent negative interactions, find the time period that generated the highest viral multiplication effect in the social network. The viral multiplication effect for a time period is calculated as the product of engagement scores for consecutive days within that period, and your task is to identify the period with the maximum viral impact.
    

    """
    n = len(arr)
    max_ending_here = 1
    min_ending_here = 1
    max_so_far = 0
    flag = 0
    for i in range(0, n):
        if arr[i] > 0:
            max_ending_here = max_ending_here * arr[i]
            min_ending_here = min(min_ending_here * arr[i], 1)
            flag = 1
        elif arr[i] == 0:
            max_ending_here = 1
            min_ending_here = 1
        else:
            temp = max_ending_here
            max_ending_here = max(min_ending_here * arr[i], 1)
            min_ending_here = temp * arr[i]
        if max_so_far < max_ending_here:
            max_so_far = max_ending_here
    if flag == 0 and max_so_far == 0:
        return 0
    return max_so_far