#include <bits/stdc++.h>
using namespace std;
inline int read() {
  char c = getchar();
  int x = 0;
  bool f = 0;
  for (; !isdigit(c); c = getchar()) f ^= !(c ^ 45);
  for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  if (f) x = -x;
  return x;
}
const double eps = 1e-8, pi = 3.14159265358979323846;
struct P {
  double x, y;
  P(double x = 0, double y = 0) : x(x), y(y) {}
  P& operator+=(P o) { return x += o.x, y += o.y, *this; }
  P& operator-=(P o) { return x -= o.x, y -= o.y, *this; }
  P& operator*=(double o) { return x *= o, y *= o, *this; }
  P& operator/=(double o) { return x /= o, y /= o, *this; }
  friend P operator+(P a, P b) { return a += b; }
  friend P operator-(P a, P b) { return a -= b; }
  friend P operator*(P a, double b) { return a *= b; }
  friend P operator/(P a, double b) { return a /= b; }
  friend bool operator<(P a, P b) {
    return fabs(a.x - b.x) < eps ? a.y < b.y : a.x < b.x;
  }
  friend double operator*(P a, P b) { return a.x * b.x + a.y * b.y; }
  friend double operator%(P a, P b) { return a.x * b.y - a.y * b.x; }
  inline void spin(double o) {
    double s = sin(o), c = cos(o), xx = x * c - y * s, yy = x * s - y * c;
    x = xx, y = yy;
  }
  inline double ang() { return atan2(y, x); }
  inline double l() { return sqrt((*this) * (*this)); }
};
inline double d(P a, P b) { return (a - b).l(); }
struct line {
  P a, b;
  double c;
  line() {}
  line(P a, P b) : a(a), b(b) { c = b.ang(); }
  friend P operator*(line a, line b) {
    return a.a + a.b * (b.b % (a.a - b.a) / (a.b % b.b));
  }
  friend bool operator<(line a, line b) {
    return fabs(a.c - b.c) < eps ? (b.a - a.a) % a.b < 0 : a.c < b.c;
  }
};
vector<P> halfplane(vector<line> l) {
  vector<P> res;
  sort(l.begin(), l.end());
  deque<P> p;
  deque<line> q;
  for (auto o : l) {
    while (p.size() && (p.back() - o.a) % o.b > 0) q.pop_back(), p.pop_back();
    while (p.size() && (p.front() - o.a) % o.b > 0)
      q.pop_front(), p.pop_front();
    if (q.size() && fabs(o.b % q.back().b) < eps) {
      if (fabs(o.b.ang() - q.back().b.ang()) > eps) return p.clear(), res;
      q.pop_back();
      if (p.size()) p.pop_back();
    }
    if (q.size()) p.push_back(q.back() * o);
    q.push_back(o);
  }
  while (p.size() && (p.back() - q.front().a) % (q.front().b) > 0)
    q.pop_back(), p.pop_back();
  if (q.size() < 3)
    p.clear();
  else
    p.push_back(q.front() * q.back());
  while (p.size()) res.push_back(p.front()), p.pop_front();
  return res;
}
int n;
P p[1000005], p1, p2, res1, res2;
vector<line> tmp, l;
bool chk(int l, int r, double mid, P& qwq) {
  vector<line> t = tmp;
  for (register int i = (l); i <= (r); ++i) {
    line o = ::l[i];
    P go = o.b;
    go.spin(pi / 2), go *= mid / go.l();
    o.a += go, o.b *= -1, o.c = o.b.ang(), t.push_back(o);
  }
  vector<P> res = halfplane(t);
  return res.size() ? qwq = res.back(), 1 : 0;
}
bool check(double r) {
  int p = 0;
  for (register int i = (0); i <= (n - 1); ++i) {
    while (p < i + n - 2 && chk(i, p, r, p1)) p++;
    if (chk(p, i + n - 1, r, p2)) return 1;
  }
  return 0;
}
int main() {
  n = read();
  for (register int i = (0); i <= (n - 1); ++i)
    p[i].x = read(), p[i].y = read();
  p[n] = p[0];
  for (register int i = (0); i <= (n - 1); ++i)
    l.push_back(line(p[i], p[i + 1] - p[i]));
  tmp = l;
  for (register int i = (0); i <= (n - 1); ++i) l.push_back(l[i]);
  double l = 0, r = 1e5;
  while (r - l > eps) {
    double mid = (l + r) / 2;
    if (check(mid))
      r = mid, res1 = p1, res2 = p2;
    else
      l = mid;
  }
  printf("%.12lf\n%.12lf %.12lf\n%.12lf %.12lf", r, res1.x, res1.y, res2.x,
         res2.y);
  return 0;
}
