给定一个长度为N的数组A=[A1, A2, ... AN],已知其中每个元素Ai的值都只可能是1, 2或者3。

请求出有多少下标三元组(i, j, k)满足1 ≤ i < j < k ≤ N且Ai < Aj < Ak。

Input

第一行包含一个整数N  

第二行包含N个整数A1, A2, ... AN。(1 ≤ Ai ≤ 3)  

对于30%的数据,1 ≤ N ≤ 100  

对于80%的数据,1 ≤ N ≤ 1000  

对于100%的数据,1 ≤ N ≤ 100000  

Output

一个整数表示答案

Sample Input


6 1 3 2 1 2 3


Sample Output


3


一开始想的是找到2然后计算2前边有几个1后边有几个3,果断超时

这个方法是先找出3的个数,然后在遍历的过程中可以动态的计算出当前2  前面1的个数,后边3的个数

import java.util.Scanner;

public class Main16 {
     public static void main(String[] args) {
//	   Scanner scan=new Scanner(System.in);
//	   int n=scan.nextInt();
//	   int arr[]=new int[n];
//	   boolean[] bool=new boolean[n];
//	   for(int i=0;i<n;i++){
//		   arr[i]=scan.nextInt();
//		   if(arr[i]==2)
//		       bool[i]=true;
//		   else 
//			   bool[i]=false;
//	   }
//	   long sum=0;
//	   for(int i=0;i<n;i++){
//		   if(bool[i]){
//			   int num1=0,num3=0;
//			   for(int j=0;j<i;j++){
//				   if(arr[j]==1){
//					   num1++;
//				   }
//			   }
//			   for(int j=i+1;j<n;j++){
//				   if(arr[j]==3){
//					   num3++;
//				   }
//			   }
//			   sum+=(long)num1*num3;
//		   }
//	   }
//	   System.out.println(sum);
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    int arr[]=new int[n];
    int num1=0,num3=0;
    long sum=0;
    for(int i=0;i<n;i++){
    	arr[i]=scan.nextInt();
    	if(arr[i]==3){
    		num3++;
    	}
    }
    for(int i=0;i<n;i++){
    	if(arr[i]==1){
    		num1++;
    	}
    	if(arr[i]==3){
    		num3--;
    	}
    	if(arr[i]==2){
    		sum+=(long)num1*num3;
    	}
    }
    System.out.println(sum);
}
}