#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  int v = 0, f = 1;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = (c & 15);
  while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);
  x = v * f;
}
inline void read(long long &x) {
  long long v = 0ll, f = 1ll;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = (c & 15);
  while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);
  x = v * f;
}
inline void readc(char &x) {
  char c;
  while (((c = getchar()) == ' ') || c == '\n')
    ;
  x = c;
}
int n, m, i, j;
struct ii {
  double x, y;
  double len() { return sqrt(x * x + y * y); }
  ii la() { return (ii){-y / len(), x / len()}; }
} a[305], res[2], q2[605];
ii operator+(ii x, ii y) { return (ii){x.x + y.x, x.y + y.y}; }
ii operator-(ii x, ii y) { return (ii){x.x - y.x, x.y - y.y}; }
struct lne {
  ii x, y;
  double ang;
} b[605], c[605], q1[605];
int ql, qr, cnt;
double crs(ii x, ii y) { return x.x * y.y - x.y * y.x; }
ii inter(lne x, lne y) {
  double s1 = crs(y.x - x.x, x.y - x.x);
  double s2 = crs(x.y - x.x, y.y - x.x);
  return (ii){(y.x.x * s2 + y.y.x * s1) / (s1 + s2),
              (y.x.y * s2 + y.y.y * s1) / (s1 + s2)};
}
bool cmp(lne x, lne y) {
  if (abs(x.ang - y.ang) < 1e-10) {
    return crs(x.y - x.x, y.y - x.x) < 0;
  }
  return x.ang < y.ang;
}
bool ffnd() {
  sort(c + 1, c + cnt + 1, cmp);
  ql = 1;
  qr = 0;
  int i;
  for (((i)) = (1); ((i)) <= ((cnt)); ((i))++) {
    if (ql <= qr && abs(c[i].ang - q1[qr].ang) < 1e-10) {
      continue;
    }
    while (ql < qr && crs(c[i].y - c[i].x, q2[qr] - c[i].x) <= 0) {
      qr--;
    }
    while (ql < qr && crs(c[i].y - c[i].x, q2[ql + 1] - c[i].x) <= 0) {
      ql++;
    }
    q1[++qr] = c[i];
    if (ql < qr) q2[qr] = inter(c[i], q1[qr - 1]);
  }
  while (ql < qr && crs(q1[ql].y - q1[ql].x, q2[qr] - q1[ql].x) <= 0) {
    qr--;
  }
  return qr - ql + 1 >= 3;
}
bool checkintv(int l, int r) {
  cnt = n;
  int i;
  for (((i)) = (1); ((i)) <= ((n)); ((i))++) c[i] = b[i];
  for ((i) = (l); (i) <= (r); (i)++) c[++cnt] = b[n + (i - 1) % n + 1];
  return ffnd();
}
bool check(double r) {
  int i, j;
  for (((i)) = (1); ((i)) <= ((n)); ((i))++) {
    ii t = (b[i].y - b[i].x).la();
    t.x *= r;
    t.y *= r;
    b[i + n] = b[i];
    b[i + n].x = b[i + n].x + t;
    b[i + n].y = b[i + n].y + t;
    swap(b[i + n].x, b[i + n].y);
    ii v = (b[i + n].y - b[i + n].x);
    b[i + n].ang = atan2(v.y, v.x);
  }
  j = 1;
  for (((i)) = (1); ((i)) <= ((n)); ((i))++) {
    while (j < n && checkintv(i, j + 1)) {
      j++;
    }
    if (checkintv(j + 1, i + n - 1)) {
      res[1] = q2[qr];
      checkintv(i, j);
      res[0] = q2[qr];
      return 1;
    }
  }
  return 0;
}
int main() {
  cin >> n;
  for (((i)) = (1); ((i)) <= ((n)); ((i))++) {
    cin >> a[i].x >> a[i].y;
  }
  a[n + 1] = a[1];
  for (((i)) = (1); ((i)) <= ((n)); ((i))++) {
    b[i].x = a[i];
    b[i].y = a[i + 1];
    ii v = (a[i + 1] - a[i]);
    b[i].ang = atan2(v.y, v.x);
  }
  double l = 0, r = 50000, mid, ans = 50000;
  while (r - l > 1e-7) {
    mid = (l + r) / 2;
    if (check(mid)) {
      ans = r = mid;
    } else {
      l = mid;
    }
  }
  printf("%.8f\n", ans);
  check(ans);
  printf("%.8f %.8f\n", res[0].x, res[0].y);
  printf("%.8f %.8f\n", res[1].x, res[1].y);
  return 0;
}
