#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
const int oo = 0x3f3f3f3f;
const double eps = 1e-8;
inline int dcmp(double first) { return first < -eps ? -1 : first > eps; }
struct point {
  double first, second;
  point() {}
  point(const double &_x, const double &_y) : first(_x), second(_y) {}
  friend point operator+(const point &first, const point &second) {
    return point(first.first + second.first, first.second + second.second);
  }
  friend point &operator+=(point &first, const point &second) {
    first.first += second.first, first.second += second.second;
    return first;
  }
  friend point operator-(const point &first, const point &second) {
    return point(first.first - second.first, first.second - second.second);
  }
  friend point &operator-=(point &first, const point &second) {
    first.first -= second.first, first.second -= second.second;
    return first;
  }
  friend point operator*(const point &first, const double &second) {
    return point(first.first * second, first.second * second);
  }
  friend point &operator*=(point &first, const double &second) {
    first.first *= second, first.second *= second;
    return first;
  }
  friend point operator/(const point &first, const double &second) {
    return point(first.first / second, first.second / second);
  }
  friend point &operator/=(point &first, const double &second) {
    first.first /= second, first.second /= second;
    return first;
  }
  friend bool operator<(const point &first, const point &second) {
    if (!dcmp(first.first - second.first))
      return dcmp(first.second - second.second) < 0;
    return first.first < second.first;
  }
  friend double operator*(const point &first, const point &second) {
    return first.first * second.first + first.second * second.second;
  }
  friend double operator^(const point &first, const point &second) {
    return first.first * second.second - first.second * second.first;
  }
  double length() { return sqrt(first * first + second * second); }
  double length2() { return first * first + second * second; }
};
const int maxn = 300;
int n;
point a[maxn + 5];
inline double dis(const point &k, const point &i, const point &j) {
  return ((i - k) ^ (j - k)) / (j - i).length();
}
inline double calc(int first, int second, bool out) {
  if ((second - first + n) % n <= 2) {
    if (out)
      printf("%.15f %.15f\n", a[(first + 1) % n].first,
             a[(first + 1) % n].second);
    return 0;
  }
  if (((a[(first + 1) % n] - a[first]) ^
       (a[(second + n - 1) % n] - a[second])) > 0)
    return 1e100;
  double u = -dis(a[first], a[(second + n - 1) % n], a[second]);
  for (int i = first, nxt; i != second; i = nxt) {
    nxt = (i + 1) % n;
    double v = dis(a[nxt], a[first], a[(first + 1) % n]) -
               dis(a[nxt], a[(second + n - 1) % n], a[second]);
    if ((u > 0) != (v > 0)) {
      point p = (a[i] * v - a[nxt] * u) / (v - u);
      if (out) printf("%.15f %.15f\n", p.first, p.second);
      return dis(p, a[first], a[(first + 1) % n]);
    }
    u = v;
  }
  assert(0);
  return 1e100;
}
int main() {
  scanf("%d", &n);
  for (int i = (0), i_end_ = (n); i < i_end_; ++i)
    scanf("%lf%lf", &a[i].first, &a[i].second);
  double ans = 1e100;
  int ansx = -1, ansy = -1;
  for (int i = (0), i_end_ = (n); i < i_end_; ++i)
    for (int j = (i + 2), j_end_ = (n); j < j_end_; ++j)
      if (chkmin(ans, max(calc(i, j, 0), calc(j, i, 0)))) ansx = i, ansy = j;
  printf("%.15f\n", ans);
  calc(ansx, ansy, 1);
  calc(ansy, ansx, 1);
  return 0;
}
