#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 3) + (x << 1) + (ch ^ 48);
    ch = getchar();
  }
  return x * f;
}
struct point {
  double x, y;
  point() {}
  point(double x, double y) : x(x), y(y) {}
  point friend operator-(point a) { return point(-a.x, -a.y); }
  point friend operator+(point a, point b) {
    return point(a.x + b.x, a.y + b.y);
  }
  point friend operator-(point a, point b) {
    return point(a.x - b.x, a.y - b.y);
  }
  point friend operator*(point a, double b) { return point(a.x * b, a.y * b); }
  point friend operator/(point a, double b) { return point(a.x / b, a.y / b); }
  double friend operator*(point a, point b) { return a.x * b.x + a.y * b.y; }
  double friend operator/(point a, point b) { return a.x * b.y - a.y * b.x; }
  double a() { return atan2(y, x); }
  double l() { return sqrt(x * x + y * y); }
  point perp() { return point(-y, x) / l(); }
};
struct line {
  point p, v;
  double a;
  line() {}
  line(point p, point v) : p(p), v(v) { a = v.a(); }
  point friend operator*(line a, line b) {
    return a.p + a.v * (b.v / (a.p - b.p) / (a.v / b.v));
  }
  int friend operator<(line a, line b) {
    if (fabs(a.a - b.a) >= eps) return a.a < b.a;
    return a.v / (b.p - a.p) > 0;
  }
};
const int N = 310;
int X[N], Y[N], p[N << 1], nex[N << 1];
line e[N << 1], q1[N << 1];
point Ans[2], q2[N << 1], ret[N];
int n, l, r, vis[N << 1];
int cmp(int a, int b) { return e[a] < e[b]; }
int solve(int ls, int rs) {
  for (int i = 1; i <= n; i++) vis[i] = 1, vis[i + n] = 0;
  for (int i = ls; i <= rs; i++) vis[(i - 1) % n + 1 + n] = 1;
  l = 1;
  r = 0;
  for (int i = 1; i <= (n << 1); i++) {
    if (!vis[p[i]]) continue;
    line now = e[p[i]];
    while (l < r && now.v / (q2[r] - now.p) < eps) r--;
    while (l < r && now.v / (q2[l + 1] - now.p) < eps) l++;
    if (l <= r && fabs(q1[r].a - now.a) < eps)
      q1[r] = now;
    else
      q1[++r] = now;
    if (l < r) q2[r] = q1[r - 1] * now;
  }
  line now = q1[l];
  while (l < r && now.v / (q2[r] - now.p) < eps) r--;
  return r - l >= 2;
}
int check(double R) {
  for (int i = 1; i <= n; i++)
    e[i + n] = line(e[i].p + e[i].v.perp() * R, -e[i].v);
  sort(p + 1, p + 1 + (n << 1), cmp);
  for (int i = 1, j = 1; i <= n; i++) {
    while (j < i + n - 1 && solve(i, j + 1)) j++;
    solve(i, nex[i] = j), ret[i] = q2[r];
  }
  for (int i = 1, dis, j; i <= n; i++) {
    dis = nex[i] - i + 1, j = nex[i] % n + 1;
    dis += nex[j] - j + 1;
    if (dis >= n) {
      Ans[0] = ret[i];
      Ans[1] = ret[j];
      return 1;
    }
  }
  return 0;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) X[i] = read(), Y[i] = read();
  for (int i = 1; i <= n; i++)
    e[i] = line(point(X[i], Y[i]),
                point(X[i % n + 1], Y[i % n + 1]) - point(X[i], Y[i]));
  for (int i = 1; i <= (n << 1); i++) p[i] = i;
  double la = 0, ra = 2e4, mid, ans = 0;
  while (ra - la >= eps) {
    mid = (la + ra) / 2.0;
    if (check(mid))
      ans = mid, ra = mid;
    else
      la = mid;
  }
  check(ans);
  printf("%.10f\n", (double)(ans + eps));
  printf("%.10f %.10f\n", (double)Ans[0].x, (double)Ans[0].y);
  printf("%.10f %.10f\n", (double)Ans[1].x, (double)Ans[1].y);
  return 0;
}
