#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> vec(n);
    int count_positive = 0;
    for (int i = 0; i < n; ++i) {
        cin >> vec[i];
        if(vec[i] > 0) ++count_positive;
    }

    //判断数组中的正数有没有3个以上 没有直接输出0
    if(count_positive < 3) {
        cout << 0 << endl;
        return 0;
    }

    // 计算前缀和
    vector<int> prefix_sum(n + 1, 0);
    for (int i = 1; i <= n; ++i) {
        prefix_sum[i] = prefix_sum[i - 1] + vec[i - 1];
    }

    // 如果总和不能被 3 整除,直接输出 0
    int total = prefix_sum[n];
    if (total % 3 != 0) {
        cout << 0 << endl;
        return 0;
    }
    int target = total / 3;

    // 记录 [0, i) 内最后一个正数的下标
    vector<int> max_idx(n + 1, -1);
    for (int i = 1; i <= n; ++i) {
        if (vec[i - 1] > 0) {
            max_idx[i] = i - 1;
        } else {
            max_idx[i] = max_idx[i - 1];
        }
    }

    // 找到所有满足 prefix_sum[i] == target 的位置(左端点)
    vector<int> left;
    for (int i = 1; i <= n; ++i) {
        if (prefix_sum[i] == target) {
            left.push_back(i);
        }
    }

    // 找到所有满足 prefix_sum[j] == 2 * target 的位置(右端点)
    vector<int> right;
    for (int j = 1; j <= n; ++j) {
        if (prefix_sum[j] == 2 * target) {
            right.push_back(j);
        }
    }

    // 统计满足条件的 (i, j) 对数
    int sol = 0;
    int right_ptr = 0; // 指向 right 数组的指针
    for (int i : left) {
        // 找到第一个 j > i 且 prefix_sum[j] == 2 * target
        while (right_ptr < right.size() && right[right_ptr] <= i) {
            right_ptr++;
        }
        // 遍历所有满足 j > i 的 j
        for (int j_idx = right_ptr; j_idx < right.size(); ++j_idx) {
            int j = right[j_idx];
            // 检查 [0, j) 和 [i, j) 和 [j, n) 是否有正数
            if (max_idx[i] >= 0 && max_idx[j] >= i && max_idx[n] >= j) {
                sol++;
            }
        }
    }
    cout << sol << endl;
    return 0;
}