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 JAVA):

Solution:
import java.io.*;
import java.util.*;
import java.math.*;

public class Solution
{

BufferedReader in;
PrintWriter out;
StringTokenizer ss;

String _token()throws IOException
{
   while (!ss.hasMoreTokens())ss=new StringTokenizer(in.readLine());
   return ss.nextToken();
}
int _int()throws IOException
{
   return Integer.parseInt(_token());
}
long _long()throws IOException
{
   return Long.parseLong(_token());
}
double _double()throws IOException
{
   return Double.parseDouble(_token());
}

void dbg(String s){System.out.println(s);}

BigInteger a(BigInteger A, BigInteger B){return A.add(B);}
BigInteger m(BigInteger A, BigInteger B){return A.multiply(B);}
BigInteger s(BigInteger A, BigInteger B){return A.subtract(B);}
BigInteger d(BigInteger A, BigInteger B){return A.divide(B);}




long []x;
int n;

long st[]= new long[3];

boolean can(long k)
{
  for(int i=0;i<3;i++) 
    st[i]=-1;

  int s=0;

  for(int i=0;i<n;i++)
  {
    if (st[s]<0)
    {
      st[s]=x[i]+k;
    }
    if (Math.abs(x[i]-st[s])>k)
    {
      s++;
      i--;
      if (s==3)
        return false;
    }
  }


 
  for(int i=0;i<3;i++)
    if (st[i]<0)
      st[i]=0;
  return true;
}

void RUN()throws IOException
{
   in = new BufferedReader(new InputStreamReader(System.in));
   out = new PrintWriter(System.out);
   ss = new StringTokenizer(" "); 

   n = _int();
   x = new long[n];
   for(int i=0;i<n;i++)
     x[i]=_long();
   Arrays.sort(x,0,n);

   for (int i=0;i<n;i++)
     x[i]*=2;
   
   long l = -1;
   long r = (long)2e10;

   while (l+1!=r)
   {
     long m = (l+r)/2;
     if (can(m))
       r=m;
     else
       l=m;
   }
   can(r);
//   out.println(r+"\n"+ st[0]+" "+st[1]+" "+st[2]+"\n"+x[0]+" "+x[1]+" "+x[2]+" "+x[3]);

   Locale.setDefault(Locale.US);
   out.printf("%.20f\n%.20f %.20f %.20f\n",r/2.0,st[0]/2.0,st[1]/2.0,st[2]/2.0);


   out.close();
}


public static void main(String[] args)throws Exception
{
try {new Solution().RUN();}catch (Exception e){System.out.println("RE");};
}

}