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: Runtime Error)

#include"iomanip"
#include"iostream"
#include"limits"
#include"cmath"
#include"vector"
#include"algorithm"
#include"list"
#include"queue"
#include"stack"
#include"set"
#include"unordered_set"
#include"map"
#include"unordered_map"
#include"string"
#include"cstring"
#include"assert.h"
using namespace std;
#define ff first
#define ss second
#define all(v) v.begin(),v.end()
#define mp make_pair
#define pb push_back
#define mset(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	int n;
	cin>>n;
	map<ll,ll>my;
	for(int i=0;i<n;++i)
	{
		ll x;
		cin>>x;
		my[x]++;
	}
	for(map<ll,ll>::iterator it=my.begin();it!=my.end();)
	{
		auto itt=it;
		itt++;
		if((it->second)<=1)
		{
			my.erase(it);
		}
		it=itt;
	}
	if(my.empty())
	{
		cout<<"0\n";
	}
	if(my.size()<=1)
	{
		auto i1=my.end();
		i1--;
		if(i1->second<4)
			cout<<"0\n";
		else cout<<i1->first*i1->first<<'\n';
		return 0;
	}
	auto i1=my.end(),i2=i1;
	i1--;i2--;i2--;
	cout<<i1->first*i2->first<<'\n';
}