#include <bits/stdc++.h>
using namespace std;
const int oo = 2139063143;
const int N = 1010000;
const int P = 1000000007;
const double eps = 1e-7;
template <typename T>
inline void sc(T &x) {
  x = 0;
  static int p;
  p = 1;
  static char c;
  c = getchar();
  while (!isdigit(c)) {
    if (c == '-') p = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c - 48);
    c = getchar();
  }
  x *= p;
}
template <typename T>
inline void print(T x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
template <typename T>
inline void pr(T x) {
  print(x), putchar('\n');
}
template <typename T1, typename T2>
void chkmax(T1 &A, T2 B) {
  A = A >= B ? A : B;
}
template <typename T1, typename T2>
void chkmin(T1 &A, T2 B) {
  A = A <= B ? A : B;
}
int n;
struct po {
  double x, y;
  po(double xx = 0, double yy = 0) { x = xx, y = yy; }
} a[N];
po operator+(po A, po B) { return po(A.x + B.x, A.y + B.y); }
po operator-(po A, po B) { return po(A.x - B.x, A.y - B.y); }
double operator*(po A, po B) { return A.x * B.y - A.y * B.x; }
po operator*(po A, double B) { return po(A.x * B, A.y * B); }
po operator*(double B, po A) { return po(A.x * B, A.y * B); }
double S(double A) { return A * A; }
double getlen(po A) { return sqrt(S(A.x) + S(A.y)); }
struct line {
  po a, b;
  double slp;
} l[N], c[N], d[N];
po crosspoint(line A, line B) {
  double k1 = (B.b - A.a) * (A.b - A.a);
  double k2 = (A.b - A.a) * (B.a - A.a);
  double t = k1 / (k1 + k2);
  return B.b + (B.a - B.b) * t;
}
bool ontheright(line A, po B) { return (B - A.a) * (A.b - A.a) > 0; }
bool check0(line A, line B, line C) { return ontheright(C, crosspoint(A, B)); }
bool operator<(line A, line B) {
  if (A.slp != B.slp) return A.slp < B.slp;
  return ontheright(A, B.a);
}
int q[N], he, ta;
bool halfplane(int n, bool op = 0) {
  int p = 1, m = 0;
  for (int i = 1; i <= n; i++) {
    while (p <= ::n && c[p] < d[i]) l[++m] = c[p++];
    l[++m] = d[i];
  }
  while (p <= ::n) l[++m] = c[p++];
  n = 0;
  for (int i = 1; i <= m; i++)
    if (i == 1 || l[i].slp != l[i - 1].slp) l[++n] = l[i];
  he = 1, ta = 0;
  for (int i = 1; i <= n; i++) {
    while (he < ta && check0(l[q[ta - 1]], l[q[ta]], l[i])) --ta;
    while (he < ta && check0(l[q[he]], l[q[he + 1]], l[i])) ++he;
    q[++ta] = i;
  }
  while (he < ta && check0(l[q[ta - 1]], l[q[ta]], l[q[he]])) --ta;
  while (he < ta && check0(l[q[he]], l[q[he + 1]], l[q[ta]])) ++he;
  if (op) {
    po p = crosspoint(l[q[he]], l[q[he + 1]]);
    printf("%.9lf %.9lf\n", p.x, p.y);
  }
  return ta - he + 1 >= 3;
}
bool check(int l, int r, double x, bool op = 0) {
  int m = 0;
  for (int i = l; i < r; i++) {
    po g = a[i] - a[i + 1];
    g = po(g.y, -g.x);
    g = g * (x / getlen(g));
    d[++m] = (line){a[i + 1] + g, a[i] + g, 0};
  }
  for (int i = 1; i <= m; i++)
    d[i].slp = atan2(d[i].b.y - d[i].a.y, d[i].b.x - d[i].a.x);
  sort(d + 1, d + m + 1);
  return halfplane(m, op);
}
int b[N];
bool solve(double x, bool op = 0) {
  for (int i = 1, j = 3; i <= n; i++) {
    while (j < i + n && check(i, j + 1, x)) ++j;
    if (j == i + n) return 1;
    b[i] = j;
  }
  for (int i = 1; i <= n; i++) {
    int l = b[i] <= n ? b[i] : (b[i] - n);
    if (b[l] >= i + n) {
      check(i, b[i], x, op), check(l, i + n, x, op);
      return 1;
    }
  }
  return 0;
}
int main() {
  sc(n);
  for (int i = 1; i <= n; i++) {
    int x, y;
    sc(x), sc(y);
    a[i] = po(x, y);
  }
  for (int i = n + 1; i <= n << 1; i++) a[i] = a[i - n];
  for (int i = 1; i <= n; i++) c[i] = (line){a[i], a[i + 1], 0};
  for (int i = 1; i <= n; i++)
    c[i].slp = atan2(c[i].b.y - c[i].a.y, c[i].b.x - c[i].a.x);
  sort(c + 1, c + n + 1);
  double L = 0, R = 1e4;
  while (L + eps < R) {
    double mid = (L + R) / 2;
    if (solve(mid))
      R = mid;
    else
      L = mid;
  }
  printf("%.9lf\n", R);
  solve(R, 1);
  return 0;
}
