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 (GCC 5.4.1) (judge verdict: Runtime Error)

#include<stdio.h>
#include<stdlib.h>


typedef struct node {
  struct node *p;
  int x;
} LIST;
 LIST *a =NULL;

void add(int x){
 LIST *add = (LIST *)malloc(sizeof(LIST));
 LIST **p =&a;
 while(*p!=NULL){
  if((*p)->x > x) p=&((*p)->p);
 }
 add->x =x;
 add->p = *p;
 *p = add;
 return 0;
}

int get(){
 if(a==NULL) return -1;
 int x=a->x;
 LIST *p =a;
 a=a->p;
 free(p);
 return x;
}

int main()
{
 int x, y, b[100000]={0};
 int n, i;
 scanf("%d", &n);
 for(i=0; i<n; i++){
  scanf("%d", &x);
  b[x]++;
  if(b[x] ==1)
   add(x);
 }
 if((x=get()) == -1){
  puts("0");
  return 0;
 }
 if((y=get())==-1){
   puts("0");
  return 0;
 }
 printf("%d\n", x*y);
 while(get()!=-1);
 return 0;
}