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)

// header {{{
#include <bits/stdc++.h>
using namespace std;

// {U}{INT,LONG,LLONG}_{MAX,MIN}
#define INF         INT_MAX/3
#define LLINF       LLONG_MAX/3
#define MOD         (1000000007LL)
#define MODA(a, b)  a=((a)+(b))%MOD
#define MODP(a, b)  a=((a)*(b))%MOD
#define inc(i, l, r)   for(int i=(l);i<(r);i++)
#define dec(i, l, r)   for(int i=(r)-1;i>=(l);i--)
#define pb          push_back
#define se          second
#define fi          first
#define mset(a, b)  memset(a, b, sizeof(a))

using LL  = long long;
using G   = vector<vector<int>>;

int di[] = {0, -1, 0, 1};
int dj[] = {1, 0, -1, 0};
// }}}

int main() {
    cin.tie(0);ios::sync_with_stdio(false);
    int n;cin >> n;
    map<int, int> cnt;
    set<int> st;
    inc(i, 0, n){
        int a;cin >> a;
        st.insert(a);
        cnt[a]++;
    }
    vector<int> v;
    for(auto a : st){
        if(cnt[a] < 2) continue;
        v.pb(a);
    }
    sort(v.begin(), v.end());
    reverse(v.begin(), v.end());
    int m = v.size();
    if(m == 0){
        cout << 0 << endl;
    }else if(m == 1){
        if(cnt[v[0]] >= 4){
            cout << v[0]*v[0] << endl;
        }else{
            cout << 0 << endl;
        }
    }else{
        if(cnt[v[0]] >= 4){
            cout << v[0]*v[0] << endl;
        }else{
            cout << v[0]*v[1] << endl;
        }
    }
    return 0;
}