#include <bits/stdc++.h>
using namespace std;
namespace io {
const int SI = 1 << 21 | 1;
char IB[SI], *IS, *IT, OB[SI], *OS = OB, *OT = OS + SI - 1, c, ch[100];
int f, t;
inline void flush() { fwrite(OB, 1, OS - OB, stdout), OS = OB; }
inline void pc(char x) {
  *OS++ = x;
  if (OS == OT) flush();
}
template <class I>
inline void rd(I &x) {
  for (f = 1, c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                              IS == IT ? EOF : *IS++)
                            : *IS++);
       c < '0' || c > '9';
       c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                       IS == IT ? EOF : *IS++)
                     : *IS++))
    if (c == '-') f = -1;
  for (x = 0; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + (c & 15),
      c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                      IS == IT ? EOF : *IS++)
                    : *IS++))
    ;
  x *= f;
}
template <class I>
inline void rda(I *a, int &n) {
  for (int i = 1; i <= n; i++) rd(a[i]);
}
inline void rds(char *s, int &x) {
  for (c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                       IS == IT ? EOF : *IS++)
                     : *IS++);
       c < 33 || c > 126;
       c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                       IS == IT ? EOF : *IS++)
                     : *IS++))
    ;
  for (x = 0; c >= 33 && c <= 126;
       s[++x] = c, c = (IS == IT ? (IT = (IS = IB) + fread(IB, 1, SI, stdin),
                                   IS == IT ? EOF : *IS++)
                                 : *IS++))
    ;
  s[x + 1] = '\0';
}
template <class I>
inline void print(I x, char k = '\n') {
  if (!x) pc('0');
  if (x < 0) pc('-'), x = -x;
  while (x) ch[++t] = x % 10 + '0', x /= 10;
  while (t) pc(ch[t--]);
  pc(k);
}
inline void prints(string s) {
  int x = s.length();
  while (t < x) pc(s[t++]);
  pc('\n'), t = 0;
}
struct Flush {
  ~Flush() { flush(); }
} flusher;
}  // namespace io
using io::print;
using io::prints;
using io::rd;
using io::rda;
using io::rds;
const double eps = 1e-10, PI = acos(-1);
struct P {
  double x, y;
  inline P() {}
  inline P(double x, double y) : x(x), y(y) {}
  inline P &operator+=(P o) { return x += o.x, y += o.y, *this; }
  inline P &operator-=(P o) { return x -= o.x, y -= o.y, *this; }
  inline P &operator*=(double o) { return x *= o, y *= o, *this; }
  inline P &operator/=(double o) { return x /= o, y /= o, *this; }
  inline friend P operator+(P a, P b) { return a += b; }
  inline friend P operator-(P a, P b) { return a -= b; }
  inline friend P operator*(P a, double b) { return a *= b; }
  inline friend P operator/(P a, double b) { return a /= b; }
  inline friend bool operator<(P a, P b) {
    return fabs(a.x - b.x) < eps ? a.y < b.y : a.x < b.x;
  }
  inline friend bool operator==(P a, P b) { return !(a < b) && !(b < a); }
  inline friend double operator*(P a, P b) { return a.x * b.x + a.y * b.y; }
  inline friend double operator%(P a, P b) { return a.x * b.y - a.y * b.x; }
  inline friend double operator^(P a, P b) { return a * b / a.l() / b.l(); }
  inline double a() { return atan2(y, x); }
  inline double l() { return sqrt(*this * *this); }
  inline void r(double o) {
    double s = sin(o), c = cos(o), X = x * c - y * s, Y = x * s + y * c;
    x = X, y = Y;
  }
};
struct L {
  P a, b;
  double c;
  inline L() {}
  inline L(P a, P b) : a(a), b(b) { c = b.a(); }
  inline friend P operator*(L a, L b) {
    return a.a + a.b * (b.b % (a.a - b.a) / (a.b % b.b));
  }
  inline friend double operator/(L a, P b) {
    return fabs(a.b % (b - a.a)) / a.b.l();
  }
  inline friend bool operator<(L a, L b) {
    return fabs(a.c - b.c) < eps ? (b.a - a.a) % a.b < 0 : a.c < b.c;
  }
};
inline deque<P> half_plane(vector<L> l) {
  sort(l.begin(), l.end());
  deque<P> r;
  deque<L> q;
  for (L o : l) {
    while (r.size() && (r.back() - o.a) % o.b > 0) q.pop_back(), r.pop_back();
    while (r.size() && (r.front() - o.a) % o.b > 0)
      q.pop_front(), r.pop_front();
    if (q.size() && fabs(o.b % q.back().b) < eps) {
      if (fabs(o.b.a() - q.back().b.a()) > eps) return r.clear(), r;
      q.pop_back();
      if (r.size()) r.pop_back();
    }
    if (q.size()) r.push_back(q.back() * o);
    q.push_back(o);
  }
  while (r.size() && (r.back() - q.front().a) % q.front().b > 0)
    q.pop_back(), r.pop_back();
  if (q.size() < 3u)
    r.clear();
  else
    r.push_back(q.front() * q.back());
  return r;
}
int n;
vector<L> l, q;
P p1, p2, ans1, ans2;
inline bool pd(int i, int j, double r, P &t) {
  vector<L> s = q;
  for (int k = i; k <= j; k++) {
    L o = l[k];
    P p = o.b;
    p.r(PI / 2);
    p *= r / p.l();
    o.a += p, o.b *= -1, o.c = o.b.a();
    s.push_back(o);
  }
  deque<P> p = half_plane(s);
  if (!p.size()) return 0;
  return t = p.back(), 1;
}
inline bool pd(double r) {
  for (int i = 0, j = 0; i < n; i++) {
    while (j < i + n - 2 && pd(i, j, r, p1)) ++j;
    if (pd(j, i + n - 1, r, p2)) return 1;
  }
  return 0;
}
int main() {
  rd(n);
  vector<P> p;
  for (int i = 1, x, y; i <= n; i++) rd(x), rd(y), p.push_back(P(x, y));
  p.push_back(p[0]);
  for (int i = 0; i < n; i++) l.push_back(L(p[i], p[i + 1] - p[i]));
  p.pop_back(), q = l;
  for (int i = 0; i < n; i++) l.push_back(l[i]);
  double l = 0, r = 1e5;
  while (r - l > eps) {
    double mid = (l + r) / 2;
    if (pd(mid))
      r = mid, ans1 = p1, ans2 = p2;
    else
      l = mid;
  }
  printf("%.10f\n", r);
  printf("%.10f %.10f\n", ans1.x, ans1.y);
  printf("%.10f %.10f\n", ans2.x, ans2.y);
  return 0;
}
