
    Design a fraud detection algorithm that identifies the sequence of consecutive transactions with the highest combined multiplicative impact, where each transaction amount can be positive (credits) or negative (debits), to detect potential fraudulent patterns. The algorithm should analyze a time window of transactions and return the maximum product value of any continuous subsequence of transactions to highlight suspicious activity patterns.
    

    
def max_subarray_product(arr):
    """
    Design a fraud detection algorithm that identifies the sequence of consecutive transactions with the highest combined multiplicative impact, where each transaction amount can be positive (credits) or negative (debits), to detect potential fraudulent patterns. The algorithm should analyze a time window of transactions and return the maximum product value of any continuous subsequence of transactions to highlight suspicious activity patterns.
    

    """
def max_subarray_product(arr):
    """
    Design a fraud detection algorithm that identifies the sequence of consecutive transactions with the highest combined multiplicative impact, where each transaction amount can be positive (credits) or negative (debits), to detect potential fraudulent patterns. The algorithm should analyze a time window of transactions and return the maximum product value of any continuous subsequence of transactions to highlight suspicious activity patterns.
    

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