#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
struct point {
  double first, second;
  point(double first = 0, double second = 0) : first(first), second(second) {}
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator*(double a) { return point(first * a, second * a); }
  point operator/(double a) { return point(first / a, second / a); }
  point operator&(point a) {
    return point(first * a.first - second * a.second,
                 first * a.second + second * a.first);
  }
  double operator*(point a) { return first * a.first + second * a.second; }
  double operator^(point a) { return first * a.second - second * a.first; }
  bool operator<(const point &a) const {
    if (fabs(first - a.first) > eps) return first < a.first;
    return second < a.second - eps;
  }
  bool operator==(const point &a) const {
    if (fabs(first - a.first) > eps) return 0;
    return fabs(second - a.second) < eps;
  }
  double nor() { return sqrt(*this * *this); }
  point norm() {
    double s = nor();
    if (fabs(s) < eps) return *this;
    return *this / s;
  }
  void input() { cin >> first >> second; }
  void print() { printf("%.10lf %.10lf\n", first, second); }
};
int sgn(double a) { return (a > eps) - (a < -eps); }
point p[333 * 3], q[333 * 3];
bitset<333> b[333 * 3];
int can(point a, point b, point c, double r) {
  if (a == b) return 1;
  if (a == c) return 1;
  double cc = fabs((a - b) ^ (b - c)) / (b - c).nor();
  return cc < r + eps;
}
bool intersect(point a, point b, point c, point d, point *q, int &m,
               int ok = 0) {
  if (!ok) {
    if (sgn((a - b) ^ (a - c)) * sgn((a - b) ^ (a - d)) >= 0) return 0;
    double s1 = fabs((a - b) ^ (a - c)), s2 = fabs((a - b) ^ (a - d));
    q[m++] = (c * s2 + d * s1) / (s1 + s2);
    return 1;
  } else {
    if (sgn((b - a) ^ (d - c)) == 0) return 0;
    double s = (b - a) ^ (d - c), s1 = (c - a) ^ (d - c);
    q[m++] = a + (b - a) * s1 / s;
    return 1;
  }
}
int n;
point qa[333], qb[333];
int solve(double r, int ok = 0) {
  int m = 0;
  for (int i = 0; i < n; i++) {
    q[m++] = p[i];
    qa[i] = p[i] + ((p[i + 1] - p[i]).norm() & point(0, 1)) * r;
    qb[i] = p[i + 1] + ((p[i + 1] - p[i]).norm() & point(0, 1)) * r;
    for (int j = 0; j < n; j++) {
      intersect(qa[i], qb[i], p[j], p[j + 1], q, m);
    }
  }
  for (int i = 0; i < n; i++) {
    if (intersect(qa[i], qb[i], qa[(i + 1) % n], qa[(i + 1) % n], q, m, 1)) {
      int ok = 0;
      for (int k = 0; k < n && !ok; k++) {
        if (sgn((q[m - 1] - p[k]) ^ (p[k + 1] - p[k])) < 0) ok = 1;
      }
      if (ok) m--;
    }
  }
  for (int i = 0; i < m; i++) {
    b[i].reset();
    for (int j = 0; j < n; j++) {
      if (can(q[i], p[j], p[j + 1], r)) b[i].set(j);
    }
    for (int j = 0; j <= i; j++)
      if ((b[i] | b[j]).count() == n) {
        if (ok) {
          printf("%.10lf\n", r);
          q[i].print();
          q[j].print();
        }
        return 1;
      }
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) p[i].input();
  for (int i = 0; i < n; i++) p[i + n] = p[i];
  double st = 0, ed = 1e5;
  for (int i = 0; i < 60; i++) {
    double mid = (st + ed) / 2;
    if (solve(mid))
      ed = mid;
    else
      st = mid;
  }
  solve(ed, 1);
  return 0;
}
