#include <bits/stdc++.h>
using namespace std;
int n;
complex<long double> p[301];
bool ccw(complex<long double> a, complex<long double> b) {
  return (b * conj(a)).imag() > 0;
}
long double intersectionParam(complex<long double> a, complex<long double> b,
                              complex<long double> c, complex<long double> d) {
  complex<long double> u = (c - a) / (b - a);
  complex<long double> v = (d - a) / (b - a);
  return (u.real() * v.imag() - u.imag() * v.real()) / (v.imag() - u.imag());
}
complex<long double> lineIntersection(complex<long double> a,
                                      complex<long double> b,
                                      complex<long double> c,
                                      complex<long double> d) {
  long double t = intersectionParam(a, b, c, d);
  return a * (1 - t) + b * t;
}
complex<long double> angBisec(complex<long double> a, complex<long double> b,
                              complex<long double> c) {
  complex<long double> aa = (a - b) / abs(a - b);
  complex<long double> cc = (c - b) / abs(c - b);
  complex<long double> bb = sqrt(aa / cc);
  return bb * cc;
}
long double pointLineDistance(complex<long double> pp, complex<long double> a,
                              complex<long double> b) {
  return abs(((pp - a) / (b - a)).imag()) * abs(b - a);
}
long double ans(int i, int j) {
  if (i == j) return 0;
  complex<long double> z = lineIntersection(p[i], p[i + 1], p[j], p[j + 1]);
  complex<long double> hlp = angBisec(p[i], z, p[j + 1]);
  for (int ii = i; i != j; ii++) {
    ii %= n;
    long double tmp = intersectionParam(p[ii], p[ii + 1], z, z + hlp);
    if (tmp >= 0.0 && tmp <= 1.0) {
      long double asd =
          pointLineDistance(p[ii] * (1 - tmp) + p[ii + 1] * tmp, p[i], z);
      return asd;
    }
  }
  return 1e18;
}
void prntPt(int i, int j) {
  complex<long double> z = lineIntersection(p[i], p[i + 1], p[j], p[j + 1]);
  complex<long double> hlp = angBisec(p[i], z, p[j + 1]);
  for (int ii = i; i != j; ii++) {
    ii %= n;
    long double tmp = intersectionParam(p[ii], p[ii + 1], z, z + hlp);
    if (tmp >= 0.0 && tmp <= 1.0) {
      complex<long double> asd = p[ii] * (1 - tmp) + p[ii + 1] * tmp;
      cout << asd.real() << " " << asd.imag() << "\n";
      return;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    long double x, y;
    cin >> x >> y;
    p[i] = {x, y};
  }
  p[n] = p[0];
  long double parsa = 1e18;
  int i1 = -1;
  int i2 = -1;
  for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
      if (i == j || ccw(p[i + 1] - p[i], p[j + 1] - p[j])) {
        int k1 = (j + 1) % n;
        int k2 = (i - 1 + n) % n;
        if (k1 == k2 || ccw(p[k1 + 1] - p[k1], p[k2 + 1] - p[k2])) {
          long double hlp = max(ans(i, j), ans(k1, k2));
          if (hlp < parsa) {
            parsa = hlp;
            i1 = i;
            i2 = j;
          }
        }
      }
    }
  }
  cout << setprecision(15);
  cout << parsa << "\n";
  if (i1 == i2)
    cout << p[i1].real() << " " << p[i1].imag() << "\n";
  else
    prntPt(i1, i2);
  int k1 = (i2 + 1) % n;
  int k2 = (i1 - 1 + n) % n;
  if (k1 == k2)
    cout << p[k1].real() << " " << p[k1].imag() << "\n";
  else
    prntPt(k1, k2);
}
