#include <bits/stdc++.h>
using namespace std;
const int nax = 1005;
struct P {
  double x, y;
  void read() { scanf("%lf%lf", &x, &y); }
  void write() { printf("%.10lf %.10lf\n", x, y); }
  P operator-(P other) { return P{x - other.x, y - other.y}; }
  double operator*(P other) { return x * other.y - y * other.x; }
  double norm() { return sqrt(x * x + y * y); }
};
P mean(P a, P b) { return P{(a.x + b.x) / 2, (a.y + b.y) / 2}; }
int n;
P t[nax];
P vec[nax];
double distLine(int i, P A) {
  return abs((vec[i] * (A - t[i])) / vec[i].norm());
}
bool possible[nax][nax];
P best_point[nax][nax];
double best_r[nax][nax];
int main() {
  scanf("%d", &n);
  for (int i = (0); i <= ((n)-1); ++i) t[i].read();
  for (int i = (0); i <= ((2 * n) - 1); ++i) t[n + i] = t[i];
  for (int i = (0); i <= ((3 * n) - 1); ++i) vec[i] = t[i + 1] - t[i];
  for (int start = (0); start <= ((n)-1); ++start) {
    int whereMid = start;
    for (int end = start; start == end || vec[start] * vec[end] > 0.5; ++end) {
      assert(end < start + n);
      while (whereMid < end &&
             distLine(start, t[whereMid + 1]) < distLine(end, t[whereMid + 1]))
        ++whereMid;
      P low = t[whereMid], high = t[whereMid + 1];
      for (int _ = (0); _ <= ((42) - 1); ++_) {
        P mid = mean(low, high);
        if (distLine(start, mid) < distLine(end, mid))
          low = mid;
        else
          high = mid;
      }
      P mid = mean(low, high);
      best_point[start][end] = best_point[start + n][end + n] = mid;
      best_r[start][end] = best_r[start + n][end + n] =
          max(distLine(start, mid), distLine(end, mid));
      possible[start][end] = possible[start + n][end + n] = true;
    }
  }
  double r = 1e7;
  P a, b;
  for (int start = (0); start <= ((n)-1); ++start)
    for (int end = (start); end <= (start + n); ++end)
      if (possible[start][end] && possible[end + 1][start + n - 1]) {
        double maybe = max(best_r[start][end], best_r[end + 1][start + n - 1]);
        if (maybe < r) {
          r = maybe;
          a = best_point[start][end];
          b = best_point[end + 1][start + n - 1];
        }
      }
  printf("%.10lf\n", r);
  a.write();
  b.write();
  return 0;
}
