C. Ilya and Sticks



time limit per test



memory limit per test



input



output



n sticks and an instrument. Each stick is characterized by its length li.

Ilya decided to make a rectangle from the sticks. And due to his whim, he decided to make rectangles in such a way that maximizes their total area. Each stick is used in making at most one rectangle, it is possible that some of sticks remain unused. Bending sticks is not allowed.

a1, a2, a3 and a4

  • a1 ≤a2 ≤a3 ≤a4
  • a1 =a2
  • a3 =a4

3 3 3 3 or 2 2 4 4. A rectangle cannot be made of, for example, sticks5 5 5 7.

5 can either stay at this length or be transformed into a stick of length 4.

You have to answer the question — what maximum total area of the rectangles can Ilya get with a file if makes rectangles from the available sticks?



Input



n (1 ≤ n ≤ 105) — the number of the available sticks.

n positive integers li (2 ≤ li ≤ 106) — the lengths of the sticks.



Output



The first line of the output must contain a single non-negative integer — the maximum total area of the rectangles that Ilya can make from the available sticks.



Sample test(s)



input



4 2 4 4 2



output



8



input



4 2 2 3 5



output



0



input



4 100003 100004 100005 100006



output



10000800015



贪心,凑当前尽量长的对子



#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (1000000+10)
typedef long long ll;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int n,a[MAXN];
int t=0,st[MAXN];
int main()
{
// freopen("Sticks.in","r",stdin);
scanf("%d",&n);
For(i,n) scanf("%d",&a[i]);
sort(a+1,a+1+n);

ForkD(i,2,n)
{
if (a[i]==a[i-1]) st[++t]=a[i],i--;
else if (a[i]-1==a[i-1]) st[++t]=a[i-1],i--;
}
ll ans=0;
for(int i=2;i<=t;i+=2)
{
ans+=(ll)st[i]*(ll)st[i-1];
}
cout<<ans<<endl;


return 0;
}