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 Kotlin (1.0.0) (judge verdict: Accepted)

import java.util.*

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val n = sc.nextInt()
    val a = (0 until n).map { sc.next().toLong() }
    println(problem071c(n, a))
}

fun problem071c(n: Int, a: List<Long>): Long {
    val map = mutableMapOf<Long, Int>()
    for (i in 0 until n) {
        val ai = a[i]
        if (map[ai] == null) {
            map[ai] = 1
        } else {
            map[ai] = map[ai]!! + 1
        }
    }
    val usable = map.filter { it.value >= 2 }.map { it.key to it.value }.sortedBy { it.first }
    if (usable.isEmpty()) return 0
    val x = usable[usable.size - 1]
    if (x.second >= 4) {
        return x.first * x.first
    } else {
        if (usable.size < 2) return 0
        val y = usable[usable.size - 2]
        return x.first * y.first
    }
}