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.

Examples

Input

6
3 1 2 4 2 1


Output

2


Input

4
1 2 3 4


Output

0


Input

10
3 3 3 3 4 4 4 5 5 5


Output

20

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class Main {
  public static void main(String[] args) {
	FastReader sc = new FastReader();
	int n = sc.nextInt();
	Map<Long, Long> map = new TreeMap<>(Collections.reverseOrder());
	
	for (int i = 0; i < n; i++) {
		long l = sc.nextLong();
		map.put(l, map.getOrDefault(l, 0L) + 1L);
	}

	long firstEdge = 0;
	long secondEdge = 0;
	int k = 2;
	for (long key: map.keySet()) {
		long cnt = map.get(key);
		
		// 如果有邊已經被取到，即使遇到正方形也不能取
		if (cnt >= 4 && k == 2) {
			System.out.println(key * key);
			System.exit(0);
		}
		
		if (cnt >= 2) {
			if (k == 2) {
				firstEdge = key;
				k--;
			} else if (k == 1) {
				secondEdge = key;
				k--;
			}
		}
		
		if (k == 0) {
			System.out.println(firstEdge * secondEdge);
			System.exit(0);
		}
	}
	System.out.println(0);
  }
  
  static class FastReader {
    BufferedReader br;
    StringTokenizer st;

    public FastReader() {
      br = new BufferedReader(new InputStreamReader(System.in));
    }
  
    String next() { 
      while (st == null || !st.hasMoreElements()) {
        try {
          st = new StringTokenizer(br.readLine());
        } catch (IOException  e) {
          e.printStackTrace();
        }
      }
      return st.nextToken();
    }

    int nextInt() {
      return Integer.parseInt(next());
    }

    long nextLong() {
      return Long.parseLong(next());
    }

    double nextDouble() { 
      return Double.parseDouble(next());
    }

    String nextLine() {
      String str = "";
        try{
            str = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
      }
  }
}
