#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <cmath>
#include <math.h>
#include <bitset>
#include <fstream>
#define int long long
#define D double
using namespace std;
struct Line{D k; D b;};
int n, ai, bi, ci;
vector<Line> points;
vector<int> rmq;
bool cmps(Line &f, Line &s){
    if (f.k > s.k) return true;
    return false;
}
bool cmpy(Line &f, Line &s){
    if (f.k > 0 && s.k > 0){
        return (f.k < s.k);
    }
    if (f.k > 0 && s.k < 0){
        return true;
    }
    if (s.k > 0 && f.k < 0){
        return false;
    }
    return ( f.k < s.k);
}
bool cmp(pair<D, int> &f, pair<D, int> &s){
    if (f.first < s.first) return true;
    if (f.first > s.first) return false;
    if (f.second > s.second) return true;
    return false;
}
void create(int i, int l, int r){
    if (r - l == 1){
        rmq[i] = 1;
        return;
    }
    int mid = (l + r) / 2;
    create(2*i+1, l, mid);
    create(2*i+2, mid, r);
    rmq[i] = rmq[2*i+1] + rmq[2*i+2];
}
int get(int i, int l, int r, int l1, int r1){
    if (l1 >= r1) return 0;
    if (l == l1 && r == r1) return rmq[i];
    int mid = (l + r) /2;
    return get(2*i+1, l, mid, l1, min(r1, mid)) + get(2*i+2, mid, r, max(l1, mid), r1);
}
void add(int i, int l, int r, int ind){
    if (r -l == 1){
        rmq[i] = 0;
        return;
    }
    int mid = (l + r) / 2;
    if (ind < mid){
        add(2*i+1, l, mid, ind);
    }
    else add(2*i+2, mid, r, ind);
    rmq[i] = rmq[2*i+1] + rmq[2*i+2];
}
int x_checker(D number){
    vector<pair<D, int> > v;
    for (int i=0; i < n; i++){
        D value = points[i].k * number + points[i].b;
        v.push_back(make_pair(value, i));
    }
    sort(v.begin(), v.end(), cmp);
    create(0, 0, n);
    int inv = 0;
    for (int i=0; i < n; i++){
        int value = v[i].second;
        inv += get(0, 0, n, 0, value);
        add(0, 0, n, value);
    }
    return inv;
}
int y_checker(D number){
    vector<pair<D, int> > v;
    for (int i=0; i < n; i++){
        D value = (number - points[i].b) / points[i].k;
        //cout << value << endl;
        v.push_back(make_pair(value, i));
    }
    sort(v.begin(), v.end(), cmp);
    create(0, 0, n);
    int inv = 0;
    for (int i=0; i < n; i++){
        int value = v[i].second;
        inv += get(0, 0, n, 0, value);
        add(0, 0, n, value);
    }
    //cout << inv << endl;
    return inv;
}
signed main()
{
    cin >> n;
    for (int i=0; i < n; i++){
        cin >> ai >> bi >> ci;
        Line l = {- ((D) ai / (D) bi), (D) ci / (D) bi};
        points.push_back(l);
    }
    for (int i=0; i < 4*n; i++){
        rmq.push_back(0);
    }
    sort(points.begin(), points.end(), cmps);
    double left = -1e10;
    double right = 1e10;
    int P = n * (n - 1) / 2;
    if (P % 2 == 0) P /= 2;
    else{
        P /= 2;
        P++;
    }
    for (int it=0; it < 100; it++){
        double mid = (left + right) / 2;
        int res = x_checker(mid);
        if (res >= P) right = mid;
        else left = mid;
    }
    cout.precision(30);
    cout << left << " ";
    left = -1e10;
    right = 1e10;
    sort(points.begin(), points.end(), cmpy);
    for (int it=0; it < 100; it++){
        double mid = (left + right) / 2;
        int res = y_checker(mid);
        if (res >= P) right = mid;
        else left = mid;
    }
    cout << left << endl;
    return 0;
}


Measured memory_bytes: 4948