#include <bits/stdc++.h>
using namespace std;
const int RLEN = 1 << 20 | 1;
inline char gc() {
  static char ibuf[RLEN], *ib, *ob;
  (ib == ob) && (ob = (ib = ibuf) + fread(ibuf, 1, RLEN, stdin));
  return (ib == ob) ? EOF : *ib++;
}
inline int read() {
  char ch = gc();
  int res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = gc();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = gc();
  return f ? res : -res;
}
inline long long readll() {
  char ch = gc();
  long long res = 0;
  bool f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = gc();
  while (isdigit(ch)) res = (res + (res << 2) << 1) + (ch ^ 48), ch = gc();
  return f ? res : -res;
}
inline char readchar() {
  char ch = gc();
  while (isspace(ch)) ch = gc();
  return ch;
}
inline int readstring(char *s) {
  int top = 0;
  char ch = gc();
  while (isspace(ch)) ch = gc();
  while (!isspace(ch) && ch != EOF) s[++top] = ch, ch = gc();
  s[top + 1] = '\0';
  return top;
}
template <typename tp>
inline void chemx(tp &a, tp b) {
  a = max(a, b);
}
template <typename tp>
inline void chemn(tp &a, tp b) {
  a = min(a, b);
}
const long double eps = 1e-12;
inline int sign(long double x) {
  return (x > eps) ? 1 : (x < -eps ? -1 : 0);
  return fabs(x) < eps ? 0 : (x > 0 ? 1 : -1);
}
struct pt {
  long double x, y;
  pt(long double _x = 0, long double _y = 0) : x(_x), y(_y) {}
  friend inline pt operator+(const pt &a, const pt &b) {
    return pt(a.x + b.x, a.y + b.y);
  }
  friend inline pt operator-(const pt &a, const pt &b) {
    return pt(a.x - b.x, a.y - b.y);
  }
  friend inline long double operator*(const pt &a, const pt &b) {
    return a.x * b.y - a.y * b.x;
  }
  friend inline long double operator^(const pt &a, const pt &b) {
    return a.x * b.x - a.y * b.y;
  }
  friend inline pt operator*(const pt &a, const long double &b) {
    return pt(a.x * b, a.y * b);
  }
  friend inline pt operator/(const pt &a, const long double &b) {
    return pt(a.x / b, a.y / b);
  }
  inline long double ang() { return atan2(y, x); }
  inline long double dis() const { return sqrt(x * x + y * y); }
  pt perp() { return pt(-y, x) / dis(); }
};
struct line {
  pt s, t;
  long double rad;
  line() {}
  line(pt _s, pt _t) { s = _s, t = _t, rad = (t - s).ang(); }
  void write() {
    cout << s.x << " " << s.y << " " << t.x << " " << t.y << " " << rad << '\n';
  }
  friend inline bool operator<(const line &a, const line &b) {
    return sign(a.rad - b.rad) ? a.rad < b.rad
                               : sign((a.t - a.s) * (b.t - a.s)) > 0;
  }
  inline line move(const long double &k) const {
    pt tmp = pt(k * sin(rad), -k * cos(rad));
    return line(s + tmp, t + tmp);
  }
};
inline pt Inter(const line &a, const line &b) {
  long double s1 = (b.t - a.s) * (b.s - a.s), s2 = (b.t - b.s) * (a.t - b.s);
  long double k = (sign(s1 + s2)) ? (s1) / (s1 + s2) : 0;
  return a.s + (a.t - a.s) * k;
}
const int N = 605;
pt p[N], ans1, ans2, res1, res2;
int n, cnt, hd, tl, id[N], ps[N], tot;
bool vis[N];
line t[N], q[N], st[N], tmp[N];
inline bool comp(const line &a, const line &b, const line &c) {
  return sign((Inter(a, b) - c.s) * (c.t - c.s)) >= 0;
}
inline bool half_inter() {
  int m = 0;
  for (int i = 1; i <= cnt; i++) {
    if (sign(q[i].rad - q[i - 1].rad)) m++;
    q[m] = q[i];
  }
  cnt = m;
  if (cnt == 1) {
    st[1] = st[2] = q[1];
    return true;
  }
  hd = 1, tl = 2, st[1] = q[1], st[2] = q[2];
  for (int i = 3; i <= cnt; i++) {
    while (hd < tl && comp(st[tl - 1], st[tl], q[i])) tl--;
    while (hd < tl && comp(st[hd], st[hd + 1], q[i])) hd++;
    st[++tl] = q[i];
  }
  while (hd < tl && comp(st[tl - 1], st[tl], st[hd])) tl--;
  while (hd < tl && comp(st[hd], st[hd + 1], st[tl])) hd++;
  return (tl - hd) >= 2;
}
inline line rev(line x) { return line(x.t, x.s); }
inline bool judge(int l, int r, pt &ans) {
  cnt = 0;
  if (l + 1 >= r) {
    ans = Inter(t[l], t[r]);
    return true;
  }
  for (int i = 1; i <= n; i++) vis[ps[i]] = 1;
  for (int i = l; i <= r; i++) vis[ps[(i - 1) % n + 1 + n]] = 1;
  for (int i = 1; i <= tot; i++)
    if (vis[i]) q[++cnt] = tmp[id[i]], vis[i] = 0;
  bool c = half_inter();
  if (!c) return false;
  ans = Inter(st[hd], st[hd + 1]);
  return true;
}
inline bool check(long double k, int fg = 0) {
  tot = 0;
  for (int i = 1; i <= n; i++) tmp[++tot] = t[i];
  for (int i = 1; i <= n; i++) tmp[++tot] = rev(t[i].move(-k));
  sort(id + 1, id + tot + 1,
       [](const int &i, const int &j) { return tmp[i] < tmp[j]; });
  for (int i = 1; i <= tot; i++) ps[id[i]] = i;
  for (int i = 1, j = 1; i <= n; i++) {
    while (j < n + i - 1 && judge(i, j + 1, ans1)) j++;
    if (judge(j + 1, n + i - 1, ans2)) return true;
  }
  return false;
}
int main() {
  n = read();
  for (int i = 1; i <= n * 2; i++) id[i] = i;
  for (int i = 1; i <= n; i++) p[i].x = read(), p[i].y = read();
  for (int i = 1; i < n; i++) t[i] = line(p[i], p[i + 1]);
  t[n] = line(p[n], p[1]);
  for (int i = 1; i <= n; i++) t[i + n] = t[i];
  long double l = 0, r = 1e5;
  while (l + eps < r) {
    long double mid = (l + r) * 0.5;
    if (check(mid))
      r = mid, res1 = ans1, res2 = ans2;
    else
      l = mid;
  }
  printf("%.10lf\n", (double)l);
  printf("%.10lf %.10lf\n", (double)res1.x, (double)res1.y);
  printf("%.10lf %.10lf\n", (double)res2.x, (double)res2.y);
  return 0;
}
