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 <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
#include <list>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iterator>
#include <set>
#include <functional>
#include <iomanip>

using namespace std;

#define DT long long
#define forn(i,n)for(i=0;i<n;i++)
#define forc(i,c,n)for(i=c;i<=n;i++)

int main() {
	ifstream fin("Text.txt");
	int i, j, q;
	double sa, sc;
	DT h,w,a, b, c, d, n, m, k, s = 0, t = 0, c4=0,c2=0;
	//fin >> n;
	scanf("%I64d", &n);
	//fin >> n;
	map<DT, DT>mp;
	vector<DT>vc(max(2*n,(long long)2));
	forn(i, n) {
		//fin >> a;
		scanf("%I64d", &a);
		mp[a]++;
	}
	map<DT, DT>::iterator it1, it2;
	it1 = mp.begin();
	while (it1!=mp.end())
	{
		if (it1->second > 3) {
			vc[t] = it1->first;
			vc[t + 1] = it1->first;
			t += 2;
		}
		else if (it1->second > 1) {
			vc[t] = it1->first;
			t ++;
		}
		it1++;
	}
	sort(vc.rbegin(), vc.rend());
	cout << vc[0] * vc[1] << endl;
	return 0;
}