Problem: N different natural numbers are given. If you select four different ones and set them as $ A $, $ B $, $ C $, $ D $, the following formula

$ \ Frac {A + B} {C --D} $



I want to find the maximum value of.




Given N different natural numbers, choose 4 different from them and create a program to find the maximum value of the above formula.



Input

The input is given in the following format.


N
a1 a2 ... aN


The number N (4 ≤ N ≤ 1000) of natural numbers is given in the first line. The value ai (1 ≤ ai ≤ 108) of each natural number is given in the second line. However, the same natural number does not appear more than once (ai ≠ aj for i ≠ j).

Output

Outputs the maximum value of the above formula as a real number for a given N natural numbers. However, the error must not exceed plus or minus 10-5.

Examples

Input

10
1 2 3 4 5 6 7 8 9 10


Output

19.00000


Input

5
22 100 42 3 86


Output

9.78947


Input

6
15 21 36 10 34 5


Output

18.00000


Input

4
100000 99999 8 1


Output

28571.285714

Solution (in CPP):

Solution:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>

using namespace std;

typedef pair<long long int, long long int> P;
typedef pair<long long int, P> Q;

bool ss(P a, P b) {
	if (a.first != b.first && a.first != b.second && a.second != b.first && a.second != b.second) {
		return true;
	}
	return false;
}

int main() {
	int n;
	cin >> n;
	vector<long long int> a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	sort(a.begin(), a.end());
	vector<Q> b;
	vector<Q> c;
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			b.push_back(Q(a[j]-a[i], P(a[i], a[j])));
			c.push_back(Q(a[j]+a[i], P(a[i], a[j])));
		}
	}
	double MAX = 0.0;
	int sz = b.size();
	sort(b.begin(), b.end());
	sort(c.begin(), c.end());
	for (int i = 0; i < sz; i++) {
		if (ss(b[0].second, c[i].second)) {
			MAX = max(MAX, (double)c[i].first / (double)b[0].first);
		}
		if (ss(b[i].second, c[sz - 1].second)) {
			MAX = max(MAX, (double)c[sz-1].first / (double)b[i].first);
		}
	}
	printf("%.10f\n", MAX);
	return 0;
}