def solve():
    # 读取输入
    n = int(input())
    arr = list(map(int, input().split()))

    # 如果数组长度小于3,无法分成3部分,直接输出0
    if n < 3:
        print(0)
        return

    # 计算数组总和
    total_sum = sum(arr)

    # 如果总和不能被3整除,无法分成3个和相等的子数组,直接输出0
    if total_sum % 3 != 0:
        print(0)
        return

    # 计算每个子数组的目标和
    target = total_sum // 3

    # 计算前缀和数组,prefix_sum[i]表示前i个元素的和
    prefix_sum = [0] * (n + 1)
    for i in range(1, n + 1):
        prefix_sum[i] = prefix_sum[i - 1] + arr[i - 1]

    # 计算前缀正数个数数组,prefix_positive[i]表示前i个元素中正数的个数
    prefix_positive = [0] * (n + 1)
    for i in range(1, n + 1):
        prefix_positive[i] = prefix_positive[i - 1] + (1 if arr[i - 1] > 0 else 0)

    # 寻找所有可能的第一分割点i,满足前i项和等于target且至少包含一个正数
    candidates_i = []
    for i in range(1, n - 1):  # i最多到n-2,确保后面至少有两个元素
        if prefix_sum[i] == target and prefix_positive[i] >= 1:
            candidates_i.append(i)

    # 寻找所有可能的第二分割点j,满足前j项和等于2*target且第三部分至少包含一个正数
    candidates_j = []
    for j in range(2, n):  # j最多到n-1,确保第三部分至少有一个元素
        if (
            prefix_sum[j] == 2 * target
            and (prefix_positive[n] - prefix_positive[j]) >= 1
        ):
            candidates_j.append(j)

    # 统计满足条件的分割方案数
    count = 0
    for j in candidates_j:
        # 遍历所有i < j的候选分割点i,确保中间部分至少有一个正数
        for i in candidates_i:
            if i >= j:
                continue  # 确保i < j
            if prefix_positive[j] - prefix_positive[i] >= 1:
                count += 1

    print(count)


solve()