#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<cmath>
#include<ctime>
#include<assert.h>
#define rep(i,x,y) for(int i=x;i<=y;++i)
#define int64 long long
#define SZ(x) (int(x.size()))
#define fi first
#define se second
#define mk make_pair
#define pb push_back
using namespace std;

#define TASK "shooting"

typedef long double R;
const R EPS = 1e-6;
const R INF = 1e7;

const int N = 105;
struct R2 {
	R x, y;
	R2() {
	}
	R2(R x, R y) :
			x(x), y(y) {
	}
	R2 operator +(const R2 &A) const {
		return R2(x + A.x, y + A.y);
	}
	R2 operator -(const R2 &A) const {
		return R2(x - A.x, y - A.y);
	}
	R2 operator *(const R &A) const {
		return R2(x * A, y * A);
	}
	R operator %(const R2 &A) const {
		return x * A.y - y * A.x;
	}
	R2 T() const {
		return R2(y, -x);
	}
	R len() const {
		return sqrt(x * x + y * y);
	}
	void normalize() {
		R l = len();
		x /= l, y /= l;
	}
	R ang() const {
		return atan2(y, x);
	}
	void read() {
		double _x, _y;
		scanf("%lf%lf", &_x, &_y);
		x = _x, y = _y;
	}
	void prt() {
		printf("%.20lf\n%.20lf\n", double(x), double(y));
	}
	/*void prt1() {
	 printf("%.15lf %.15lf\n", x, y);
	 }*/
} a[N], point;
int n, c;
R o[N * N];
int p[N];
R q[N];

R cross(const R2 &A, const R2 &B, const R2 &C) {
	return (C - A) % (B - A);
}

bool intersect(const R2 &A, const R2 &B, const R2 &C, const R2 &D, R &t) {
	if (abs((B - A) % (D - C)) < EPS)
		return false;
	R s1 = cross(A, B, C), s2 = cross(A, B, D);
	t = s1 / (s1 - s2);
	return true;
}

const R PI = acos(-1.);
R norm(R a) {
	while (a >= PI)
		a -= 2 * PI;
	while (a < -PI)
		a += 2 * PI;
	return a;
}

bool cmp(const int i, const int j) {
	return q[i] < q[j];
}

void add(R l, R r) {
	if (l <= r)
		q[c++] = l, q[c++] = r;
	else
		add(-PI, r), add(l, PI);
}

int calc(R2 O) {
	c = 0;
	for (int i = 0; i < n * 2; i += 2) {
		R a1 = norm((a[i] - O).ang());
		R a2 = norm((a[i + 1] - O).ang());
		if (norm(a2 - a1) < 0)
			swap(a1, a2);
		add(a1, a2);
	}
	for (int i = 0; i < c; ++i)
		p[i] = i;
	sort(p, p + c, cmp);
	int s = 0, res = 0;
	for (int i = 0; i < c; ++i) {
		int j = p[i];
		if (j & 1)
			--s;
		else
			res = max(res, ++s);
	}
	/*if (res == 1) {
		O.prt();
		printf("res=%d\n", res);
	}*/
	return res;
}

int main() {
#ifdef  LOCAL
	freopen("in","r",stdin);
#else
	freopen(TASK".in", "r", stdin);
	freopen(TASK".out", "w", stdout);
#endif
	scanf("%d", &n);
	for (int i = 0; i < n * 2; ++i)
		a[i].read();
	int ans = n + 1;
	for (int i = 0; i < n * 2; ++i)
		for (int j = 0; j < i; ++j) {
			int m = 0;
			o[m++] = -INF;
			o[m++] = INF;
			R t;
			for (int x = 0; x < n * 2; ++x)
				for (int y = 0; y < x; ++y)
					if (intersect(a[x], a[y], a[i], a[j], t))
						o[m++] = t * (a[j] - a[i]).len();
			sort(o, o + m);
			/*printf("%d %d %d\n", i, j, m);
			 for (int k = 0; k < m; ++k) {
			 R2 V = (a[j] - a[i]);
			 V.normalize();
			 (a[i] + V * o[k]).prt1();
			 }*/
			for (int k = 0; k < m - 1; ++k)
				if (o[k + 1] - o[k] > EPS) {
					R2 V = (a[j] - a[i]);
					V.normalize();
					R2 O = a[i] + V * ((o[k] + o[k + 1]) / 2.);
					for (int dir = -1; dir <= 1; dir += 2) {
						R2 O1 = O + V.T() * EPS * dir;
						R res = calc(O1);
						if (res < ans) {
							ans = res;
							point = O1;
						}
					}
				}
		}
	printf("%d\n", ans);
	point.prt();
	return 0;
}

