#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <sstream>
#include <string>
#define _repargs(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(int i=(int)(a);i<(int)(b);++i)
#define rep(...) _repargs(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define all(x) (x).begin(),(x).end()
#define mod 1000000007
#define inf 2000000007
#define mp make_pair
#define pb push_back
typedef long long ll;
using namespace std;
template <typename T>
inline void output(T a, int p = 0) {
    if(p) cout << fixed << setprecision(p)  << a;
    else cout << a << "\n";
}

template <typename T> inline void voutput(T &v){
    rep(i, v.size()){
        if (i) cout << " " << v[i];
        else cout << v[i];
    }
    cout << endl;
}
// end of template

struct bit {
    vector<ll> v; // 部分和をbitで管理 仮想配列はa[1...n]
    bit(int n){ // bit(int n) : v(n + 1) {}
        v.resize(n + 1);
    }
    
    ll sum(int i){ // 仮想配列a[1]~a[i]の和を求める
        ll ret = 0;
        for(; i > 0; i -= i & -i){ // i & -i: iの1が立っている最高位bitをの2^を返す
            ret += v[i];
        }
        return ret;
    }
    
    void add(int i, ll w) { // index:iにwを加える
        for (; i < v.size(); i += i & -i) {
            v[i] += w;
        }
    }
};

ll swaps(vector<int> &A){
    int N = (int)A.size();
    bit B(N);
    
    ll ans = 0;
    rep(i, N){
        ans += i - B.sum(A[i]);
        B.add(A[i], 1);
    }
    return ans;
}

struct line {
    double a, b, c; int ind;
    bool operator<( const line &right ) const {
        return ind < right.ind;
    }
};

int main() {
    cin.tie(0);
    ios::sync_with_stdio(0);
    // source code
    ll N;
    cin >> N;
    vector<pair<double, line>> A(N);
    rep(i, N){
        cin >> A[i].second.a >> A[i].second.b >> A[i].second.c;
        A[i].second.ind = i + 1;
    }
    
    ll th = (N * (N - 1) + 3) / 4;
    double l = -1e11, r = 1e11;
    rep(i, N){
        double y = (A[i].second.c - A[i].second.a * l) / A[i].second.b;
        A[i].first = y;
    }
    sort(all(A));
    rep(i, N) {
        A[i].second.ind = i + 1;
    }
    ll cnt = 0;
    while(r - l > 1e-9 && cnt < 150) {
        double m = (l + r) / 2;
        rep(i, N){
            double x = (A[i].second.c - A[i].second.a * m) / A[i].second.b;
            A[i].first = x;
        }
        
        sort(all(A));
        vector<int> ord(N);
        rep(i, N) ord[i] = A[i].second.ind;
        if(swaps(ord) < th) l = m;
        else r = m;
        cnt++;
    }
    
    output(l, 11);
    cout << " ";
    
    l = -1e11, r = 1e11;
    rep(i, N){
        double x = (A[i].second.c - A[i].second.b * l) / A[i].second.a;
        A[i].first = x;
    }
    sort(all(A));
    rep(i, N) {
        A[i].second.ind = i + 1;
    }
    cnt = 0;
    while(r - l > 1e-9 && cnt < 150) {
        double m = (l + r) / 2;
        rep(i, N){
            double y = (A[i].second.c - A[i].second.b * m) / A[i].second.a;
            A[i].first = y;
        }
        
        sort(all(A));
        vector<int> ord(N);
        rep(i, N) ord[i] = A[i].second.ind;
        if(swaps(ord) < th) l = m;
        else r = m;
        cnt++;
    }
    
    output(l, 11);
    cout << endl;
    
    return 0;
}

Measured memory_bytes: 2340