#include <iostream>
#include <iomanip>
#include <cstdio>
#include <set>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
#include <memory.h>
#include <string>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#include <sstream>
 
using namespace std;
 
#define x1 _x1
#define y1 _y1
#define left _left
#define right _right
 
const string TASKNAME = "easy";
 
const int N = 2000010;
 
int x[N], y[N];
int left, right, n;
 
double get_y(int i, double xx, bool small) {
  if (x[i] == x[i + 1]) return (small ? (y[i] < y[i + 1] ? y[i] : y[i + 1]) : (y[i] > y[i + 1] ? y[i] : y[i + 1]));
  return (1.0 * y[i + 1] * (xx - x[i]) + 1.0 * y[i] * (x[i + 1] - xx)) / (x[i + 1] - x[i]);
}
 
void get_ys(double xx, double &y1, double &y2) {
  {
    int ll = left, rr = right;
    while (ll < rr) {
      int mid = (ll + rr + 1) >> 1;
      if (x[mid] < xx) ll = mid;
      else rr = mid - 1;
    }
    y2 = get_y(ll, xx, false);
  }
  {
    int ll = right, rr = left + n - 1;
    while (ll < rr) {
      int mid = (ll + rr + 1) >> 1;
      if (x[mid] > xx) ll = mid;
      else rr = mid - 1;
    }
    y1 = get_y(ll, xx, true);
  }
}
 
double xa, ya, xb, yb, yc, ans;
 
double get_h(double w, double xx) {
  double y1, y2, y3, y4;
  get_ys(xx, y1, y2);
  get_ys(xx + w, y3, y4);
  if (y3 > y1) y1 = y3;
  if (y4 < y2) y2 = y4;
  yc = y1;
  if (y1 < y2) {
    return y2 - y1;
  }
  return 0;
}
 
double get_w_h(double w) {
  double lx = x[left], rx = x[right] - w;
  for (int it2 = 0; it2 < 200; it2++) {
    double x1 = (2 * lx + rx) / 3;
    double x2 = (lx + 2 * rx) / 3;
    double h1 = get_h(w, x1);
    double h2 = get_h(w, x2);
    if (h2 == 0.0) rx = x2; else
    if (h2 < h1) rx = x2;
    else lx = x1;
  }
  double mh = get_h(w, lx);
  if (mh * w > ans) {
    ans = mh * w;
    xa = lx;
    ya = yc;
    xb = xa + w;
    yb = ya + mh;
  }
  return mh * w;
}
 
int main() {
  freopen((TASKNAME + ".in").c_str(), "r", stdin);
  freopen((TASKNAME + ".out").c_str(), "w", stdout);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", x + i, y + i);
    x[i + n] = x[i];
    y[i + n] = y[i];
  }
  left = right = 0;
  for (int i = 1; i < n; i++) {
    if (x[i] < x[left]) left = i;
    if (x[i] > x[right]) right = i;
  }
  double lw = 0, hw = x[right] - x[left];
  ans = 0.0;
  for (int it = 0; it < 200; it++) {
    double w1 = (2 * lw + hw) / 3;
    double w2 = (lw + 2 * hw) / 3;
    double q1 = get_w_h(w1);
    double q2 = get_w_h(w2);
    if (q2 == 0.0) hw = w2; else
    if (q2 < q1) hw = w2;
    else lw = w1;
  }
  printf("%.17lf %.17lf %.17lf %.17lf\n", xa, ya, xb, yb);
  return 0;
}