// 对存放球中的号码数组进行排序
// 如果前面的号码 和<积, 后面的就不用计算都小于;
// 如果不满足条件,进行数组回溯,判断当前号码前面的号码与当前号码后面的和,积进行判断判断
// 考虑特殊情况arr[i] == 1;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr);
int num = counter(arr,n,0,0,1);
System.out.println(num);
}
}
public static int counter(int[] arr,int n,int start,int sum,int mul) {
int count = 0;
for(int i = start; i < n; i++) {
sum += arr[i];
mul *= arr[i];
if(sum > mul) {
//使用递归向后比较
count = count + 1 + counter(arr,n,i+1,sum,mul);
//1 与任何数的和大于积;
//1 + 2 > 1 * 2; 如果等于1 直接比较后面的数
} else if(arr[i] == 1) {
count = counter(arr,n,i+1,sum,mul);
} else {
break;
}
//回溯,前面的号码与当前号码后面的在进行比较
sum -= arr[i];
mul /= arr[i];
//去重
while(i+1 < n && arr[i] == arr[i+1]) {
i++;
}
}
return count;
}
}