// 对存放球中的号码数组进行排序
// 如果前面的号码 和<积, 后面的就不用计算都小于;
// 如果不满足条件,进行数组回溯,判断当前号码前面的号码与当前号码后面的和,积进行判断判断
// 考虑特殊情况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;
    }
}