#include <bits/stdc++.h>
using namespace std;
const int nax = 3e5 + 10;
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());
}
map<int, P> best_point[nax];
map<int, double> best_r[nax];
vector<pair<int, int>> candidates;
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];
  int whereMid = 0;
  int end = 0;
  for (int start = (0); start <= ((n)-1); ++start) {
    whereMid = max(start, whereMid);
    end = max(start, end);
    while (vec[end + 1] * vec[start + n - 1] < 0.5) ++end;
    for (; 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 % n] = mid;
      best_r[start][end % n] = max(distLine(start, mid), distLine(end, mid));
      candidates.push_back(make_pair(start, end % n));
    }
    --end;
  }
  double r = 1e7;
  P a, b;
  for (pair<int, int> candidate : candidates) {
    int start = candidate.first;
    int end = candidate.second;
    int start2 = (end + 1) % n;
    int end2 = (start + n - 1) % n;
    double maybe = max(best_r[start][end], best_r[start2][end2]);
    if (maybe < r) {
      r = maybe;
      a = best_point[start][end];
      b = best_point[start2][end2];
    }
  }
  printf("%.10lf\n", r);
  a.write();
  b.write();
  return 0;
}
