#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point operator-(point A) { return (point){x - A.x, y - A.y}; }
  double operator*(point A) { return x * A.y - y * A.x; }
  double dis() { return sqrt(x * x + y * y); }
} a[1005][1005], t[1005], E[1005];
int n, vis[1005][1005];
double r[1005][1005];
point Mid(point a, point b) {
  return (point){(a.x + b.x) / 2, (a.y + b.y) / 2};
}
double disline(int i, point A) { return abs(E[i] * (A - t[i]) / E[i].dis()); }
int ch(int R) { return R % n ? R % n : n; }
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &t[i].x, &t[i].y);
  for (int i = 1; i <= 2 * n; i++) t[n + i] = t[i];
  for (int i = 1; i <= 3 * n; i++) E[i] = t[i + 1] - t[i];
  for (int L = 1, R = L + 1, nw = L; L <= n; L++)
    for (R--, nw = max(L, nw); R == L || E[L] * E[R] > 0.5; R++) {
      while (nw < R && disline(L, t[nw + 1]) < disline(R, t[nw + 1])) ++nw;
      point le = t[nw], ri = t[nw + 1];
      for (int j = 1; j <= 42; j++) {
        point mid = Mid(le, ri);
        if (disline(L, mid) < disline(R, mid))
          le = mid;
        else
          ri = mid;
      }
      point P = Mid(le, ri);
      a[L][ch(R)] = P;
      r[L][ch(R)] = max(disline(L, P), disline(R, P));
      vis[L][ch(R)] = 1;
    }
  double ans = 1e7;
  point a1, a2;
  for (int L = 1; L <= n; L++)
    for (int R = L; R <= L + n; R++)
      if (vis[L][ch(R)] && vis[ch(R + 1)][ch(L - 1 + n)]) {
        double newr = max(r[L][ch(R)], r[ch(R + 1)][ch(L - 1 + n)]);
        if (newr < ans)
          ans = newr, a1 = a[L][ch(R)], a2 = a[ch(R + 1)][ch(L - 1 + n)];
      }
  printf("%.10f\n%.10f %.10f\n%.10f %.10f\n", ans, a1.x, a1.y, a2.x, a2.y);
  return 0;
}
