#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
template<class S,class T> ostream& operator<<(ostream& o,const pair<S,T> &p){return o<<"("<<p.fs<<","<<p.sc<<")";}
template<class T> ostream& operator<<(ostream& o,const vector<T> &vc){o<<"sz = "<<vc.size()<<endl<<"[";for(const T& v:vc) o<<v<<",";o<<"]";return o;}

struct BIT{
	int N;
	vector<int> bit;
	BIT(int n){		//nは区間幅!!!
		N=n;
		bit.assign(n+1,0);
	}
	BIT(){}
	void init(int n){
		N=n;
		bit.assign(n+1,0);
	}
	int sum(int i){		//i個の和a[0]+..a[i-1]
		int s=0;
		while(i>0){
			s+=bit[i];
			i-=(i&-i);
		}
		return s;
	}
	int val(int i){	//return a[i]	(0-ind)
		return sum(i+1)-sum(i);
	}
	void add(int i,int x){	//a[i]+=x (0-indexed)
		i++;
		while(i<=N){
			bit[i]+=x;
			i+=(i&-i);
		}
	}
}bit;

int N;
int V;
const int MN = 40010;
double A[MN],B[MN],C[MN];
using P = pair<double,double>;
P p[MN];
int ox[MN];
int count(double t){
	vector<P> vs;
	rep(i,N){
		double x = p[i].fs, y = p[i].sc;
		vs.pb(P(t*x-y,ox[i]));
	}
	sort(all(vs));

	bit.init(N);

	int cnt = 0;

	rep(i,N){
		int x = vs[i].sc;
		cnt += i - bit.sum(x);
		bit.add(x,1);
	}
	return cnt;
}

double solve(){
	rep(i,N){
		p[i].fs = -A[i]/B[i];
		p[i].sc = C[i]/B[i];
	}
	vector<double> xs;
	rep(i,N){
		xs.pb(p[i].fs);
	}
	sort(all(xs));
	rep(i,N) ox[i] = lower_bound(all(xs),p[i].fs) - xs.begin();

	double ub = 1e9, lb = -1e9;
	rep(tt,100){
		double t = (ub+lb)/2;
		if(count(t)>=(V+1)/2) lb = t;
		else ub = t;
	}
	return -ub;
}
int main(){
	cin>>N;
	V = N*(N-1)/2;
	rep(i,N) cin>>A[i]>>B[i]>>C[i];
	printf("%.12f ",solve());
	rep(i,N) swap(A[i],B[i]);
	printf("%.12f\n",solve());
}
