#ifdef PRAGMA_COMMENT_LINKER
#pragma comment(linker, "/STACK:1999999999")
#endif

#define  _CRT_SECURE_NO_WARNINGS
#define  NDEBUG

#include <algorithm>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <unordered_map>
#include <unordered_set>

using namespace std;

#define all(v)                  (v).begin(), (v).end()
#define db(x)                   cout << #x << '=' << (x) << "\n"
#define fend(x)                 ((x) & ((x)+1)) - 1
#define fenu(x)                 (x) | ((x)+1)
#define ft                      first
#define len(s)                  s.length()
#define maxV(type)              std::numeric_limits<type>::max()
#define minV(type)              std::numeric_limits<type>::min()
#define mp(a, b)                std::make_pair((a), (b))
#define ord(c)                  ((c) - 'a' + 1)
#define pob()                   pop_back()
#define pof()                   pop_front()
#define pub(s)                  push_back((s))
#define puf(s)                  push_front((s))
#define sc                      second

typedef double                  db;
typedef long double             ld;
typedef long long               ll;
typedef unsigned long long      ull;

const   long double				EPS = 1e-15;
const   long double             PI = 3.14159265358979323846;

inline int lg2(ll n) { int h = 0; while ((1ll << h) < n) ++h; return h; }

struct configio {
	configio() { cin.tie(nullptr); ios_base::sync_with_stdio(false); }
} cnfio;

int diff(int a, int b, int mod) {
	return ((a - b) % mod + mod) % mod;
}

struct line {
	line() {}
	line(ld a, ld b, ld c) : a(a), b(b), c(c) {}
	line(ld x1, ld y1, ld x2, ld y2) {
		a = y1 - y2;
		b = x2 - x1;
		c = -a*x1 - b*y1;
		ld norm = sqrt(a*a + b*b);
		a /= norm, b /= norm, c /= norm;
	}
	ld dist(ld x, ld y) {
		ld norm = sqrt(a*a + b*b);
		return abs(a*x + b*y + c) / norm;
	}
	ld a, b, c;
};

const int ml = 1e4 + 1;
int n;
int maxid;
ld maxd = -1;
line lines[ml];

void max_dist(ld x, ld y) {
	maxd = -1;
	for (int i = 0; i < n; ++i) {
		ld tmp = lines[i].dist(x, y);
		if (maxd < tmp) {
			maxd = tmp;
			maxid = i;
		}
	}
}

int signum(ld val) {
	if (val > EPS) return 1;
	if (val < -EPS) return -1;
	return 0;
}

int main() {
	//freopen("input.in", "r", stdin); freopen("output.out", "w", stdout);
	cin >> n;
	for (int i = 0; i < n; i++) {
		ld  x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		lines[i] = line(x1, y1, x2, y2);
	}
	const int it_lim = 15000;
	ld step = 1000;
	ll step_lim = 100000 * 1ll * 100000;
	ld x = 12, y = 21;
	for (int i = 0; i < it_lim; ++i) {
		max_dist(x, y);
		int old_maxid = maxid;
		ld old_maxd = maxd;
		ld tmpx, tmpy;
		int sgn = signum(lines[maxid].a * x + lines[maxid].b * y + lines[maxid].c);
		while (true) {
			tmpx = x - lines[old_maxid].a * step * sgn;
			tmpy = y - lines[old_maxid].b * step * sgn;
			max_dist(tmpx, tmpy);
			if (maxd > old_maxd) {
				step /= 2;
			}
			else {
				break;
			}
		}
		step *= 2;
		if (step > step_lim) {
			step = step_lim;
		}
		x = tmpx;
		y = tmpy;
	}
	cout << fixed << setprecision(10);
	/*max_dist(4040.9996151750674, 12003.999615175067);
	cout << maxd << endl;
	max_dist(x, y);
	cout << maxd << endl;*/
	cout << x << " " << y << " " << endl;
	return 0;
}