
    Given a list of user compatibility scores where positive values indicate shared interests and negative values represent conflicting interests between consecutive users in a social network segment, find the most cohesive group of users by determining the subarray of scores whose product yields the highest compatibility value. The compatibility scores can be positive, negative, or zero, and the goal is to identify the continuous sequence of users that maximizes their collective compatibility through score multiplication.
    

    
def max_subarray_product(arr):
    """
    Given a list of user compatibility scores where positive values indicate shared interests and negative values represent conflicting interests between consecutive users in a social network segment, find the most cohesive group of users by determining the subarray of scores whose product yields the highest compatibility value. The compatibility scores can be positive, negative, or zero, and the goal is to identify the continuous sequence of users that maximizes their collective compatibility through score multiplication.
    

    """
def max_subarray_product(arr):
    """
    Given a list of user compatibility scores where positive values indicate shared interests and negative values represent conflicting interests between consecutive users in a social network segment, find the most cohesive group of users by determining the subarray of scores whose product yields the highest compatibility value. The compatibility scores can be positive, negative, or zero, and the goal is to identify the continuous sequence of users that maximizes their collective compatibility through score multiplication.
    

    """
    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