#include <bits/stdc++.h>
using namespace std;
inline int sgn(long double x) {
  return (x > -1e-10) ? ((x > 1e-10) ? 1 : 0) : -1;
}
struct Point {
  long double x, y;
  Point() {}
  Point(long double a, long double b) : x(a), y(b) {}
  long double ang() { return atan2(y, x); }
  long double len() { return sqrt(x * x + y * y); }
  Point nor() {
    long double l = len();
    return Point(-y / l, x / l);
  }
  Point operator+(Point b) { return Point(x + b.x, y + b.y); }
  Point operator-(Point b) { return Point(x - b.x, y - b.y); }
  Point operator*(long double b) { return Point(x * b, y * b); }
  Point operator/(long double b) { return Point(x / b, y / b); }
};
inline long double cross(Point x, Point y) { return x.x * y.y - x.y * y.x; }
struct Line {
  Point x, y;
  long double ang;
  Line() {}
  Line(Point a, Point b) : x(a), y(b) { ang = (y - x).ang(); }
  bool operator<(const Line& b) const {
    if (sgn(ang - b.ang)) return ang < b.ang;
    Point t1 = y, t2 = b.y;
    return sgn(cross(t1 - x, t2 - x)) < 0;
  }
};
inline Point inter(Line x, Line y) {
  long double s1 = cross(y.x - x.x, x.y - x.x);
  long double s2 = cross(x.y - x.x, y.y - x.x);
  return (y.x * s2 + y.y * s1) / (s1 + s2);
}
Line p[605];
bool in[605];
Point curp;
bool half_plane(int n) {
  static Line q1[605];
  static Point q2[605];
  int l = 1, r = 0;
  for (int i = 1; i <= n; i++)
    if (in[i] && (l > r || sgn(p[i].ang - q1[r].ang))) {
      Line t = p[i];
      while (l < r && sgn(cross(t.y - t.x, q2[r] - t.x)) <= 0) r--;
      while (l < r && sgn(cross(t.y - t.x, q2[l + 1] - t.x)) <= 0) l++;
      q1[++r] = t;
      if (l < r) q2[r] = inter(q1[r - 1], t);
    }
  while (l < r && sgn(cross(q1[l].y - q1[l].x, q2[r] - q1[l].x)) <= 0) r--;
  if (r - l < 2) return 0;
  curp = q2[r];
  return 1;
}
Line a[305], b[305], q[605];
int id1[305], id2[305], rpos[305];
Point bel[305];
bool cmp(int x, int y) { return q[x] < q[y]; }
bool check_half(int n, int l, int r) {
  memset(in, 0, sizeof(in));
  for (int i = 1; i <= n; i++) in[id1[i]] = 1;
  for (int i = l; i <= r; i++) in[id2[(i - 1) % n + 1]] = 1;
  return half_plane(2 * n);
}
Point ans1, ans2;
bool check(int n, long double r) {
  static int cur[605];
  for (int i = 1; i <= n; i++) {
    Point t = (a[i].y - a[i].x).nor();
    b[i] = Line(a[i].y + t * r, a[i].x + t * r);
  }
  for (int i = 1; i <= n; i++) {
    q[i] = a[i];
    q[n + i] = b[i];
  }
  for (int i = 1; i <= 2 * n; i++) cur[i] = i;
  sort(cur + 1, cur + 2 * n + 1, cmp);
  for (int i = 1; i <= 2 * n; i++) {
    if (cur[i] <= n)
      id1[cur[i]] = i;
    else
      id2[cur[i] - n] = i;
    p[i] = q[cur[i]];
  }
  int nr = 0;
  for (int i = 1; i <= n; i++) {
    while (nr < 2 * n && check_half(n, i, nr + 1)) nr++;
    check_half(n, i, nr);
    rpos[i] = nr;
    bel[i] = curp;
  }
  if (rpos[1] >= n) {
    ans1 = ans2 = bel[1];
    return 1;
  }
  for (int i = 1; i < n; i++)
    for (int j = i + 1; j <= n; j++)
      if (rpos[i] >= j - 1 && rpos[j] >= n + i - 1) {
        ans1 = bel[i];
        ans2 = bel[j];
        return 1;
      }
  return 0;
}
Point fir[305];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    fir[i] = Point(x, y);
  }
  for (int i = 1; i <= n; i++) a[i] = Line(fir[i], fir[i % n + 1]);
  long double l = 0, r = 1e5;
  while (r - l > 1e-12) {
    long double mid = (l + r) * .5;
    if (check(n, mid))
      r = mid;
    else
      l = mid;
  }
  check(n, l + 5e-13);
  printf("%.15Lf\n", l);
  printf("%.15Lf %.15Lf\n", ans1.x, ans1.y);
  printf("%.15Lf %.15Lf\n", ans2.x, ans2.y);
  return 0;
}
