long long solve(int* A, int ALen ) {
    // write code here
    int a;
    int b;
    int c;
    long long max=-1000000000000;
    for(a=0;a<ALen;a++)
    {
        for(b=a+1;b<ALen;b++)
        {
            for(c=b+1;c<ALen;c++)
            {
                max=max>A[a]*A[b]*A[c]? max:A[a]*A[b]*A[c];
            }
        }
    }
   
   
   
   
    return max;
}
// 方法一,遍历所有的情况,比较大小,评论:不适用所用情况

// 方法二,先从小到大排序,最后一个数如果是正值,那么增益效果最大,如果是负值,那么衰减效果是最小的,所以这三个数的乘积必须带有最后一个数,
//
// 乘积最大的数由三个变成选两个,由奇数变成偶数,同时排列是线性的,无论正负,中间数的乘积没有两端的其中一端大:这两端的乘积只可能是第一个*第二个,或者倒数第二个*第三个。

void Buble(int *arr,int n){
    int ii;//循环的次数
    int jj;//每次循环的次数

    for(ii=n-1;ii>0;ii--){
        for(jj=0;jj<ii;jj++){
            if(arr[jj]>arr[jj+1]){//从小到大
                int tmp;//换
                tmp=arr[jj];
                arr[jj]=arr[jj+1];
                arr[jj+1]=tmp;
           
               

            }
        }
    }
   

}


long long solve(int *A, int ALen) {
    // 先排序
Buble(A,ALen);
//比较大小
 long sum;
     if(A[0]*A[1]>A[ALen-2]*A[ALen-3]){
       sum=A[0]*A[1]*A[ALen-1];
       
     }
     else{
          sum=A[ALen-2]*A[ALen-3]*A[ALen-1];
     }
     return sum;

}