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

class EqualSplit {
public:
    // 构造函数,传入数组长度与数组本体
    EqualSplit(int n, const vector<long long>& arr) : n(n), a(arr) {}

    // 对外提供的主计算接口
    long long countValidSplits() {
        return compute();
    }

private:
    int n;  // 数组长度
    vector<long long> a;  // 数组本体

    // 主计算函数,仅类内部调用
    long long compute() {
        long long total = 0;
        for (auto val : a) total += val;

        // 若无法被3整除,则无解
        if (total % 3 != 0) return 0;

        long long target = total / 3;

        // 构建前缀和
        vector<long long> prefix(n);
        prefix[0] = a[0];
        for (int i = 1; i < n; ++i) {
            prefix[i] = prefix[i - 1] + a[i];
        }

        // 构建前缀正数数量统计
        vector<int> pos_count(n);
        pos_count[0] = (a[0] > 0 ? 1 : 0);
        for (int i = 1; i < n; ++i) {
            pos_count[i] = pos_count[i - 1] + (a[i] > 0 ? 1 : 0);
        }

        // 构建后缀是否包含正数数组
        vector<bool> has_pos_suffix(n);
        has_pos_suffix[n - 1] = (a[n - 1] > 0);
        for (int i = n - 2; i >= 0; --i) {
            has_pos_suffix[i] = has_pos_suffix[i + 1] || (a[i] > 0);
        }

        long long ans = 0;

        // 枚举第二刀(第二段结束位置)
        for (int i = 1; i < n - 1; ++i) {
            // 前缀和为 2 * target,且后缀(第三段)包含正数
            if (prefix[i] == 2 * target && has_pos_suffix[i + 1]) {
                // 枚举第一刀位置 j < i
                for (int j = 0; j < i; ++j) {
                    // 第一段和为 target 且包含正数
                    if (prefix[j] == target && pos_count[j] > 0) {
                        // 第二段需包含正数:[j+1..i]
                        int pos_in_middle = pos_count[i] - pos_count[j];
                        if (pos_in_middle > 0) {
                            ans++;
                        }
                    }
                }
            }
        }

        return ans;
    }
};

// 主函数入口
int main() {
    int n;
    cin >> n;
    vector<long long> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }

    // 创建 EqualSplit 对象,执行计算
    EqualSplit solver(n, a);
    cout << solver.countValidSplits() << endl;

    return 0;
}