#include <bits/stdc++.h>
using namespace std;
const int N = 610;
const long double eps = 1e-10;
int sign(long double x) { return (x > eps) - (x < -eps); }
struct Vector {
  long double x, y;
  Vector() {}
  Vector(long double x, long double y) : x(x), y(y) {}
  long double slen() const { return x * x + y * y; }
  long double len() const { return sqrtl(slen()); }
};
Vector operator+(const Vector &r, const Vector &s) {
  return Vector(r.x + s.x, r.y + s.y);
}
Vector operator-(const Vector &r, const Vector &s) {
  return Vector(r.x - s.x, r.y - s.y);
}
Vector operator*(const Vector &r, long double s) {
  return Vector(r.x * s, r.y * s);
}
Vector operator/(const Vector &r, long double s) {
  return Vector(r.x / s, r.y / s);
}
long double cross(const Vector &r, const Vector &s) {
  return r.x * s.y - r.y * s.x;
}
long double dot(const Vector &r, const Vector &s) {
  return r.x * s.x + r.y * s.y;
}
Vector normal(const Vector &v) { return Vector(-v.y, v.x); }
Vector zoom(const Vector &v, long double k) { return v * k / v.len(); }
struct Line {
  Vector p;
  Vector u;
  long double ang;
  Line() {}
  Line(const Vector &p, const Vector &u) : p(p), u(u) { ang = atan2(u.y, u.x); }
};
bool operator<(const Line &r, const Line &s) { return r.ang < s.ang; }
int n;
Vector pts[N];
Line lns[N];
int len[N];
Vector hot[N];
int nxt[N];
inline bool onleft(const Line &l, const Vector &p) {
  return sign(cross(l.u, p - l.p)) >= 0;
}
Vector inter(const Vector &P, const Vector &u, const Vector &Q,
             const Vector &v) {
  return P + u * (cross(Q - P, v) / cross(u, v));
}
Vector inter(const Line &a, const Line &b) { return inter(a.p, a.u, b.p, b.u); }
int halfinter(int n, Line *lns, Vector *pts) {
  static Line l[N];
  static Vector p[N];
  int bg, ed;
  sort(lns, lns + n);
  l[bg = ed = 1] = lns[0];
  for (int i = 1; i < n; i++) {
    while (bg < ed && !onleft(lns[i], p[ed])) ed--;
    while (bg < ed && !onleft(lns[i], p[bg + 1])) bg++;
    l[++ed] = lns[i];
    if (sign(l[ed].ang - l[ed - 1].ang) == 0) {
      ed--;
      if (onleft(l[ed], l[ed + 1].p)) l[ed] = l[ed + 1];
    }
    if (bg < ed) p[ed] = inter(l[ed], l[ed - 1]);
    while (bg < ed && ed - bg + 1 != 2 && !onleft(l[bg], p[ed])) ed--;
    if (bg < ed) p[bg] = inter(l[bg], l[ed]);
  }
  if (ed - bg + 1 < 3) return 0;
  int m = 0;
  for (int i = bg; i <= ed; i++) pts[m++] = p[i];
  return m;
}
bool good(long double r, int pos, int len, Vector &A) {
  static Line l[N + N];
  static Vector p[N + N];
  int n = 0;
  for (int i = 0; i < len; i++) {
    Line out = lns[(pos + i) % ::n];
    Vector arr = zoom(normal(out.u), 1.0);
    Line in = Line(out.p + arr * r, Vector(0, 0) - out.u);
    l[n++] = in;
  }
  for (int i = 0; i < ::n; i++) l[n++] = lns[i];
  int m = halfinter(n, l, p);
  if (m == 0) return false;
  A = Vector(0, 0);
  for (int i = 0; i < m; i++) A = A + p[i];
  A = A / m;
  return true;
}
int dis(int i, int j) {
  if (i <= j)
    return j - i + 1;
  else
    return j + n - i + 1;
}
bool check(long double r, Vector &A, Vector &B) {
  if (good(r, 0, n, A)) {
    B = A;
    return true;
  }
  for (int i = 0, j = i; i < n; i++) {
    while (good(r, i, dis(i, nxt[j]), hot[i])) j = nxt[j];
    good(r, i, dis(i, j), hot[i]);
    len[i] = dis(i, j);
    if (i == j) j++;
  }
  for (int i = 0; i < n; i++) {
    int j = (i + len[i]) % n;
    if (len[i] + len[j] >= n) {
      A = hot[i];
      B = hot[j];
      return true;
    }
  }
  return false;
}
int main() {
  scanf("%d\n", &n);
  for (int i = 0; i < n; i++) {
    double x, y;
    scanf("%lf%lf", &x, &y);
    pts[i] = Vector(x, y);
  }
  for (int i = 0; i < n; i++) nxt[i] = (i + 1) % n;
  for (int i = 0; i < n; i++) lns[i] = Line(pts[i], pts[(i + 1) % n] - pts[i]);
  Vector A, B;
  long double lf = 0.0, rg = 1.4 * 1e4;
  for (int t = 0; t < 35; t++) {
    long double mid = (lf + rg) / 2;
    if (check(mid, A, B))
      rg = mid;
    else
      lf = mid;
  }
  check(lf, A, B);
  printf("%.10f\n", (double)lf);
  printf(
      "%.10f %.10f\n"
      "%.10f %.10f\n",
      (double)A.x, (double)A.y, (double)B.x, (double)B.y);
}
