#include <bits/stdc++.h>
using namespace std;
const int N = 305;
const long double eps = 1e-14, pi = acos(-1.0);
int dcmp(const long double &x) { return fabs(x) < eps ? 0 : x < 0 ? -1 : 1; }
namespace geometry {
struct Vector {
  long double x, y;
  Vector(long double x = 0, long double y = 0) : x(x), y(y) {}
  bool operator<(const Vector &tmp) const {
    return x != tmp.x ? x < tmp.x : y < tmp.y;
  }
  bool operator==(const Vector &tmp) const {
    return dcmp(x - tmp.x) == 0 && dcmp(y - tmp.y) == 0;
  }
  Vector operator+(const Vector &tmp) const {
    return Vector(x + tmp.x, y + tmp.y);
  }
  Vector operator-(const Vector &tmp) const {
    return Vector(x - tmp.x, y - tmp.y);
  }
  Vector operator*(const Vector &tmp) const {
    return Vector(x * tmp.x, y * tmp.y);
  }
  Vector operator*(const long double &k) const { return Vector(x * k, y * k); }
  Vector operator/(const long double &k) const { return Vector(x / k, y / k); }
};
long double dot(const Vector &A, const Vector &B) {
  return A.x * B.x + A.y * B.y;
}
long double cross(const Vector &A, const Vector &B) {
  return A.x * B.y - A.y * B.x;
}
struct line {
  Vector p;
  Vector v;
  long double ang;
  line() {}
  line(Vector p, Vector v) : p(p), v(v) { ang = atan2(v.y, v.x); }
  bool operator<(const line &tmp) const {
    if (dcmp(ang - tmp.ang) != 0) return ang < tmp.ang;
    return dcmp(cross(v, tmp.p - p)) == -1;
  }
};
long double length(const Vector &A) { return sqrt(dot(A, A)); }
long double length2(const Vector &A) { return dot(A, A); }
long double angle(const Vector &A, const Vector &B) {
  return acos(dot(A, B) / length(A) / length(B));
}
Vector rotate(const Vector &A, const long double &k) {
  return Vector(A.x * cos(k) - A.y * sin(k), A.x * sin(k) + A.y * cos(k));
}
long double dis_to_line(Vector p, Vector a, Vector b) {
  Vector v1 = b - a, v2 = p - a;
  return fabs(cross(v1, v2)) / length(v1);
}
Vector line_ins(line a, line b) {
  long double t = cross(b.v, a.p - b.p) / cross(a.v, b.v);
  return a.p + a.v * t;
}
bool onleft(Vector p, line a) { return dcmp(cross(p - a.p, a.v)) == -1; }
Vector point_line_proj(Vector p, Vector a, Vector b) {
  long double k = dot(p - a, b - a) / length2(b - a);
  return a + (b - a) * k;
}
long double area(vector<Vector> &p) {
  long double ret = 0;
  for (int i = 1; i < p.size() - 1; ++i)
    ret += cross(p[i] - p[0], p[i + 1] - p[0]);
  return ret;
}
vector<Vector> convex_hull(vector<Vector> &p) {
  sort(p.begin(), p.end());
  p.erase(unique(p.begin(), p.end()), p.end());
  int m = 0, n = p.size();
  vector<Vector> ch(n + 1);
  for (int i = 0; i < n; ++i) {
    while (m > 1 && cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0) --m;
    ch[m++] = p[i];
  }
  for (int i = n - 2, k = m; i >= 0; --i) {
    while (m > k && cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) <= 0) --m;
    ch[m++] = p[i];
  }
  if (n > 1) --m;
  ch.resize(m);
  return ch;
}
vector<Vector> half_plane_ins(vector<line> &p) {
  int l = 0, r = 0, n = p.size();
  vector<Vector> ch(n + 5);
  vector<line> q(n + 5);
  for (int i = 0; i < n; ++i) {
    if (i && dcmp(p[i].ang - p[i - 1].ang) == 0) continue;
    while (r - l > 1 && !onleft(ch[r - 2], p[i])) --r;
    while (r - l > 1 && !onleft(ch[l], p[i])) ++l;
    q[r++] = p[i];
    if (r - l > 1) {
      ch[r - 2] = line_ins(q[r - 2], q[r - 1]);
    }
  }
  while (r - l > 1 && !onleft(ch[r - 2], q[l])) --r;
  ch[r - 1] = line_ins(q[l], q[r - 1]);
  return vector<Vector>(ch.begin() + l, ch.begin() + r);
}
}  // namespace geometry
using namespace geometry;
int n;
Vector p[N], ans[N], out[2];
line a[N], b[N << 1];
int c[N << 1], pos[N << 1], mxr[N], vis[N << 1];
Vector ch[N];
vector<Vector> ok(int l, int r) {
  vector<line> tmp;
  memset(vis, 0, sizeof vis);
  for (int i = 0; i < n; ++i) vis[i] = 1;
  for (int i = l; i != r; i = (i + 1) % n) vis[i + n] = 1;
  vis[r + n] = 1;
  for (int i = 0; i < 2 * n; ++i)
    if (vis[c[i]]) tmp.push_back(b[c[i]]);
  return half_plane_ins(tmp);
}
int modlen(int i, int j) {
  if (j >= i) return j - i;
  return j + n - i;
}
bool check(long double r) {
  for (int i = 0; i < n; ++i)
    b[i] = a[i], b[i + n] = line(a[i].p + ch[i] * r, Vector(0, 0) - a[i].v),
    c[i] = i, c[i + n] = i + n;
  sort(c, c + 2 * n, [&](int x, int y) { return b[x] < b[y]; });
  for (int i = 0, j = 0; i < n; i == j ? ++i, ++j : ++i) {
    while ((j + 1) % n != i && ok(i, (j + 1) % n).size() > 2) j = (j + 1) % n;
    ans[i] = ok(i, mxr[i] = j)[0];
  }
  for (int i = 0; i < n; ++i) {
    for (int j = i; j != (mxr[i] + 1) % n; j = (j + 1) % n)
      if (modlen((i + n - 1) % n, mxr[j]) < modlen((i + n - 1) % n, j))
        return out[0] = ans[i], out[1] = ans[j], 1;
    int j = (mxr[i] + 1) % n;
    if (modlen((i + n - 1) % n, mxr[j]) < modlen((i + n - 1) % n, j))
      return out[0] = ans[i], out[1] = ans[j], 1;
  }
  return 0;
}
void print(long double x) {
  double _x = x;
  printf("%.12lf ", _x);
}
int main() {
  cin >> n;
  for (int i = 0, x, y; i < n; ++i) {
    cin >> x >> y;
    p[i].x = x, p[i].y = y;
  }
  for (int i = 0; i < n; ++i) {
    a[i] = line(p[i], p[(i + 1) % n] - p[i]);
    Vector t(-a[i].v.y, a[i].v.x);
    ch[i] = t / length(t);
  }
  long double l = 0, r = 50000;
  while (r - l > eps) {
    long double mid = (l + r) / 2;
    if (check(mid))
      r = mid;
    else
      l = mid;
  }
  check(l + eps);
  print(l);
  cout << endl;
  print(out[0].x);
  print(out[0].y);
  cout << endl;
  print(out[1].x);
  print(out[1].y);
  cout << endl;
  return 0;
}
