Problem:
Score : 300 points

Problem Statement

We have N sticks with negligible thickness.
The length of the i-th stick is A_i.

Snuke wants to select four different sticks from these sticks and form a rectangle (including a square), using the sticks as its sides.
Find the maximum possible area of the rectangle.

Constraints

4 \leq N \leq 10^5

1 \leq A_i \leq 10^9

A_i is an integer.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible area of the rectangle.
If no rectangle can be formed, print 0.

Sample Input 1

6
3 1 2 4 2 1

Sample Output 1

2

1 \times 2 rectangle can be formed.

Sample Input 2

4
1 2 3 4

Sample Output 2

0

No rectangle can be formed.

Sample Input 3

10
3 3 3 3 4 4 4 5 5 5

Sample Output 3

20

Solution in C (Clang 3.8.0) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>
int compare_int(const void *a, const void *b)
{
  return *(int*)a - *(int*)b;
}
int main(void){
  int i;
  int len;
  int ii[1000000];
  int a,b,c,d=0;
  scanf("%d",&len);
  if(len <= 3){
    printf("0\n");
    return 0;
  }
  for(i=0;i<len;i++){
    scanf("%d",&ii[i]);
  }
  qsort(ii, len, sizeof(int), compare_int);
  for(i=0;i<len;i++){
    //    printf("i%d %d\n",i,ii[i]);
  }
  a = ii[len-1];
  for(i=len-2;i>1;i--){
    if(a == ii[i]){
      b = ii[i];
      i--;
      break;      
    }
    else{
      a = ii[i];
    }
  }
  //        printf("i%d a%d b%d\n",i,a,b);
  c = ii[i];
  i--;
  for(;i>=0;i--){
    if(c == ii[i]){
      d = ii[i];
      break;      
    }
    else{
      c = ii[i];
    }
  }
  if(d == 0){
    printf("0\n");
  }
  else{
    //      printf("%d %d\n",a,c);
    printf("%ld\n",(long)a*c);
  }
  return 0;
}