#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
const double inf = 1e10;
const double eps = 1e-8;
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  return x < 0 ? -1 : 1;
}
struct P {
  double x, y;
  P() {}
  P(double _x, double _y) {
    x = _x;
    y = _y;
  }
  P operator+(const P &a) const { return P(x + a.x, y + a.y); }
  P operator-(const P &a) const { return P(x - a.x, y - a.y); }
  double operator*(const P &a) const { return x * a.y - y * a.x; }
  P operator*(const double &a) const { return P(x * a, y * a); }
};
double dis(P p) { return sqrt(p.x * p.x + p.y * p.y); }
P Norm(P p) { return P(-p.y, p.x) * (1 / dis(p)); }
struct Line {
  P x, y;
  bool online(P p) { return sgn((p - x) * (y - x)) == 0; }
};
P insert(Line x, Line y) {
  double ar1 = (x.y - x.x) * (y.x - x.x);
  double ar2 = (y.y - x.x) * (x.y - x.x);
  P res = (y.y * ar1 + y.x * ar2) * (1 / (ar1 + ar2));
  return res;
}
bool check(Line x, Line y, Line z) {
  P p = insert(y, z);
  return sgn((x.y - x.x) * (p - x.x)) >= 0;
}
double Angle(Line x) { return atan2(x.y.y - x.x.y, x.y.x - x.x.x); }
bool half(const vector<Line> &v, P &p) {
  static Line q[N];
  int l = 1, r = 0;
  for (auto i : v) {
    for (; l < r && check(i, q[r], q[r - 1]); --r)
      ;
    for (; l < r && check(i, q[l], q[l + 1]); ++l)
      ;
    q[++r] = i;
  }
  for (; l < r && check(q[l], q[r], q[r - 1]); --r)
    ;
  for (; l < r && check(q[r], q[l], q[l + 1]); ++l)
    ;
  if (l + 1 >= r) return 0;
  return p = insert(q[l], q[l + 1]), 1;
}
P a[N], p1, p2;
Line L[N];
double ang[N];
int id[N], n;
bool cmp(int x, int y) {
  if (sgn(ang[x] - ang[y])) return ang[x] > ang[y];
  return sgn((L[x].y - L[x].x) * (L[y].x - L[x].x)) > 0;
}
bool check(int l, int r, P &p) {
  static int vis[N];
  memset(vis, 0, sizeof(vis));
  for (int i = (int)(l); i <= (int)(r - 1); i++) vis[(i - 1) % n + 1] = 1;
  double las = -inf;
  vector<Line> v;
  for (int i = (int)(1); i <= (int)(2 * n); i++)
    if (id[i] <= n || vis[id[i] - n])
      if (sgn(las - ang[id[i]])) {
        las = ang[id[i]];
        v.push_back(L[id[i]]);
      }
  return half(v, p);
}
bool check(double mid) {
  for (int i = (int)(1); i <= (int)(n); i++) L[i] = (Line){a[i % n + 1], a[i]};
  for (int i = (int)(1); i <= (int)(n); i++) {
    P tmp = Norm(a[i % n + 1] - a[i]);
    L[i + n].x = a[i] + tmp * mid;
    L[i + n].y = a[i % n + 1] + tmp * mid;
  }
  for (int i = (int)(1); i <= (int)(2 * n); i++) {
    id[i] = i;
    ang[i] = Angle(L[i]);
  }
  sort(id + 1, id + 2 * n + 1, cmp);
  int j = 1;
  for (int i = (int)(1); i <= (int)(n); i++) {
    P p, x, y;
    for (j = max(j, i); j < i + n && check(i, j + 1, p); x = p, ++j)
      ;
    if (j == i + n) return p1 = p2 = x, 1;
    if (check(j, i + n, y)) return p1 = x, p2 = y, 1;
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = (int)(1); i <= (int)(n); i++) {
    scanf("%lf%lf", &a[i].x, &a[i].y);
    a[i + n] = a[i];
  }
  double l = 0, r = 40000;
  for (int T = (int)(1); T <= (int)(40); T++) {
    double mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  check(r);
  printf("%.10lf\n", r);
  printf("%.10lf %.10lf\n", p1.x, p1.y);
  printf("%.10lf %.10lf\n", p2.x, p2.y);
}
