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++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

int main()
{
	long long i,j,k,n,res,tab[100010];
	cin>>n;
	for (i=1;i<=n;i++)
	 cin>>tab[i];
	sort(tab+1,tab+n+1);
	tab[0]=-5;
	i=n;
	long long sisi1=-1;
	long long simpan;
	while (i)
	{
		//cout<<i<<" i\n";
		bool cek=false;
		if (tab[i-1]==tab[i])
		{
			sisi1=tab[i];
			simpan=tab[i];
			cek=true;
		}
		if (cek)
		{
			while (tab[i]==simpan)
		 	 i--;
			simpan=i;
			break;
		}
		else
		 i--;
	}
	//cout<<sisi1<<" sisi\n";
	//cout<<simpan<<" simpan\n";
	if (sisi1==-1)
	{
		cout<<0<<"\n";
		return 0;
	}
	i=simpan;
	//cout<<i<<"i\n";
	long long sisi2=0;
	while (i)
	{
		//cout<<i<<" i\n";
		bool cek=false;
		if (tab[i-1]==tab[i])
		{
			sisi2=tab[i];
			break;
		}
		else
		 i--;
	}
	res=sisi1*sisi2;
	cout<<res<<"\n";
}