import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class HJ98 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
System.out.println(f3(arr));
}
}
private static int f3(int[] arr) {
// 求和,无法整除3则不符合要求
int sum = Arrays.stream(arr).sum();
if (sum % 3 != 0) {
return 0;
}
// 从左边遍历,记录能求和得到 sum/3的下标
int sum1 = 0;
boolean hasPosInt1 = false;
List<Integer> indexList1 = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
sum1 += arr[i];
hasPosInt1 = hasPosInt1 || arr[i] > 0;
if (hasPosInt1 && sum1 == sum / 3) {
indexList1.add(i);
}
}
// 从右边遍历,记录能求和得到 sum/3的下标
int sum2 = 0;
boolean hasPosInt2 = false;
List<Integer> indexList2 = new ArrayList<>();
for (int i = arr.length - 1; i >= 0; i--) {
sum2 += arr[i];
hasPosInt2 = hasPosInt2 || arr[i] > 0;
if (hasPosInt2 && sum2 == sum / 3) {
indexList2.add(i);
}
}
// 遍历左下标
int count = 0;
for (int i = 0; i < indexList1.size(); i++) {
// 左下标
Integer index1 = indexList1.get(i);
// 记录选中左下标时,右下标有多少种可选方案
int count1 = 0;
// 遍历右下标
for (int j = 0; j < indexList2.size(); j++) {
Integer index2 = indexList2.get(j);
// 数组2是从大到小排序的,如果index2 <= index1,则后面的也是一样,可以直接break
if (index2 <= index1) {
break;
}
// index1 - index2之间的数据,排查是否有正数
boolean hasPosInt3 = false;
for (int k = index1 + 1; k < index2; k++) {
if ( arr[k] > 0) {
hasPosInt3 = true;
break;
}
}
if (hasPosInt3) {
count1 = j + 1;
}
}
count += count1;
}
return count;
}
}