
    Given a sequence of student performance changes across consecutive assessments, find the continuous period that shows the highest overall learning growth when the changes are multiplied together. The performance changes can be positive (representing improvement) or negative (representing decline), and your task is to identify the sequence of assessments that demonstrates the most significant sustained progress in the student's learning journey.
    

    
def max_subarray_product(arr):
    """
    Given a sequence of student performance changes across consecutive assessments, find the continuous period that shows the highest overall learning growth when the changes are multiplied together. The performance changes can be positive (representing improvement) or negative (representing decline), and your task is to identify the sequence of assessments that demonstrates the most significant sustained progress in the student's learning journey.
    

    """
def max_subarray_product(arr):
    """
    Given a sequence of student performance changes across consecutive assessments, find the continuous period that shows the highest overall learning growth when the changes are multiplied together. The performance changes can be positive (representing improvement) or negative (representing decline), and your task is to identify the sequence of assessments that demonstrates the most significant sustained progress in the student's learning journey.
    

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