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);
        }
    }
}