import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int[] numList = new int[a+1];
for(int i = 1; i<= a;i++){
numList[i] = in.nextInt();
}
//记录截止当前位置的正数数量,及总和
int[] sumList = new int[a+1];
int[] cntList = new int[a+1];
for(int i = 1; i<= a;i++){
sumList[i] = sumList[i-1]+numList[i];
cntList[i] = cntList[i-1]+(numList[i]>0?1:0);
}
//判断数据是否符合条件
if(sumList[a]%3 != 0){
System.out.println(0);
return;
}
//计算每段和
int sumValue = sumList[a]/3;
//提取第一段合适的位置数量(即方案数量),该位置符合【和=sumValue】且【对应位置记录的正数数量大于0】
//为便于后续与第二段进行正数数量对比,先将正数数量相同的位置进行统计
//数组中的每个元素值代表符合第一段条件的方案数量
int[] sameCntList = new int[a+1];
for(int i = 1; i<= a;i++){
if(sumList[i] == sumValue && cntList[i] > 0){
sameCntList[cntList[i]]++;
}
}
//转换整数数量为统计序列,便于快速知晓小于指定正数数量的第一段方案数
int[] cntSortList = new int[a+1];
for(int i = 1; i<= a;i++){
cntSortList[i] = cntSortList[i-1] + sameCntList[i];
}
//提取第二段位置,并结合第一段的方案数量,计算总的方案数
//第二段位置符合【和=两倍sumValue】且【对应位置记录的正数数量大于0】且【对应位置记录的正数数量小于最后一个元素数量,保证第三段还有正数】
int result = 0;
//从第二个元素开始,截止最后一个元素前
for(int i = 2; i<= a-1;i++){
if(sumList[i] == 2*sumValue && cntList[i] > 0 && cntList[a] > cntList[i]){
result += cntSortList[cntList[i] - 1];
}
}
//
System.out.println(result);
}
}
}