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: Accepted)

#include <bits/stdc++.h>

#define rep(i, n) for(int i = 0; i < (n); i++)
#define all(a) (a).begin(),(a).end()
#define SORT(a) sort(all(a))
#define rSORT(a, i) sort(all(a),(i))

using ll = long long;
constexpr ll INF = 10000000000;
constexpr ll MOD = 1000000007;

using namespace std;
int main() {
	cin.tie(0); ios::sync_with_stdio(false);

	ll n; cin >> n;
	vector<ll>a(n);
	rep(i, n)cin >> a[i];

	//map<int, int> map;
	//rep(i, n)map[a[i]]++;

	vector<ll> cnt;
	/*
	for (auto i : map) {
		int len, num;
		tie(len, num) = i;
		while (num >= 2) {
			cnt.push_back(len);
			num -= 2;
		}
	}
	*/

	SORT(a);
	rep(i, n - 1) {
		if (a[i] == a[i + 1]) {
			cnt.push_back(a[i]);
			i++;
		}
	}

	rSORT(cnt, greater<ll>());
	if (cnt.size() >= 2)cout << cnt[0] * cnt[1] << "\n";
	else cout << "0\n";
}