Problem: The New Vasjuki village is stretched along the motorway and that's why every house on it is characterized by its shift relative to some fixed point — the xi coordinate. The village consists of n houses, the i-th house is located in the point with coordinates of xi.

TELE3, a cellular communication provider planned to locate three base stations so as to provide every house in the village with cellular communication. The base station having power d located in the point t provides with communication all the houses on the segment [t - d, t + d] (including boundaries).

To simplify the integration (and simply not to mix anything up) all the three stations are planned to possess the equal power of d. Which minimal value of d is enough to provide all the houses in the village with cellular communication.

Input

The first line contains an integer n (1 ≤ n ≤ 2·105) which represents the number of houses in the village. The second line contains the coordinates of houses — the sequence x1, x2, ..., xn of integer numbers (1 ≤ xi ≤ 109). It is possible that two or more houses are located on one point. The coordinates are given in a arbitrary order.

Output

Print the required minimal power d. In the second line print three numbers — the possible coordinates of the base stations' location. Print the coordinates with 6 digits after the decimal point. The positions of the stations can be any from 0 to 2·109 inclusively. It is accepted for the base stations to have matching coordinates. If there are many solutions, print any of them.

Examples

Input

4
1 2 3 4


Output

0.500000
1.500000 2.500000 3.500000


Input

3
10 20 30


Output

0
10.000000 20.000000 30.000000


Input

5
10003 10004 10001 10002 1


Output

0.500000
1.000000 10001.500000 10003.500000

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
inline long long readInt() {
  long long sign = 1, x = 0, c = getc(stdin);
  while (c <= 32) {
    c = getc(stdin);
  }
  if (c == '-') {
    sign = -1;
    c = getc(stdin);
  }
  while ('0' <= c && c <= '9' && c != EOF) {
    x = (x << 1) + (x << 3) + c - '0';
    c = getc(stdin);
  }
  return x * sign;
}
inline void writeLong(long long x) {
  if (x < 0) {
    putc('-', stdout);
    x = -x;
  }
  char s[40];
  long long n = 0;
  while (x || !n) {
    s[n++] = '0' + x % 10;
    x /= 10;
  }
  while (n--) {
    putc(s[n], stdout);
  }
}
inline bool des(long long i, long long j) { return i > j; }
inline bool asc(long long i, long long j) { return i < j; }
bool pairComp_s(const pair<long long, long long> &x,
                const pair<long long, long long> &y) {
  return asc(x.second, y.second);
}
long long fact(long long x) {
  long long ans = 1;
  while (x) ans *= (x--);
  return ans;
}
long long gcd(long long x, long long y) { return y ? gcd(y, x % y) : x; }
long long lcm(long long x, long long y) { return x * 1ll * y / gcd(x, y); }
long long ncr(long long n, long long r) {
  return fact(n) / (fact(n - r) * fact(r));
}
long long bin_pow(long long a, long long b) {
  long long res = 1ull;
  long long tmp = a;
  while (b) {
    if (b & 1) res = res * tmp % 1000000007;
    tmp = tmp * tmp % 1000000007;
    b >>= 1;
  }
  return res;
}
long long hexagonal_spiral[][2] = {{1, 2},   {-1, 2}, {-2, 0},
                                   {-1, -2}, {1, -2}, {2, 0}};
long long rep[] = {1, 0, 1, 1, 1, 1};
const long long M = 2e6 + 1;
long long n, m, k;
long long a[500005];
long long sum, MAX, MIN;
long long st[3];
long long x;
bool test(long long x) {
  for (long long i = 0, b = 0; i < 3; i++) {
    b = upper_bound(a, a + n, a[st[i] = b] + x) - a;
    if (b == n) return false;
  }
  return true;
}
int32_t main() {
  n = readInt();
  for (long long i = 0; i < n; ++i) a[i] = readInt();
  sort(a, a + n);
  long long l = 0, r = 1000000000, mid;
  while (l < r) {
    mid = l + (r - l) / 2;
    if (test(mid))
      l = mid + 1;
    else
      r = mid;
  }
  test(r);
  cout << setprecision(6) << fixed;
  cout << l / 2.0 << endl;
  for (long long i = 0; i < 3; ++i) cout << a[st[i]] + l / 2.0 << " ";
  cout << endl;
  return 0;
}