#define prob CandyAddict
    #ifdef  DEBUG
    #define MAXN 100300
    #else
    #define MAXN 100300
    #endif

    #include <bits/stdc++.h>

    using namespace std;
    #define endl '\n'

    #define rep(i, l, r) for (int i = l; i<r;i++)
    #define vi vector<int>
    #define all(v) v.begin(),v.end()
    #define pb(c) push_back(c)
    #define vii vector<pair<int,int>>
    #define vvi vector<vector<int>>
    #define ii pair<int,int>
    #define mp(i, j) make_pair(i,j)
    #define ull unsigned long long int
    #define ll  long long int
    #define PI  3.141592653589793238
    #define MOD (1000000007)
    #define INF (250000000)
    #define EPS 0.0000000001
    struct line {
        int a, b, c, id;
    };
    ll n;

    int read(const int *tree, int idx) {
        int sum = 0;
        while (idx > 0) {
            sum += tree[idx];
            idx -= (idx & -idx);
        }
        return sum;
    }

    void update(int *tree, int idx, int val) {
        while (idx <= n) {
            tree[idx] += val;
            idx += (idx & -idx);
        }
    }
    double x;
    bool comp1 (pair<line, int> l1, pair<line, int> l2) {
        line ln1 = l1.first;
        line ln2 = l2.first;
        int p1 =   ln2.a * ln1.b -   ln2.b * ln1.a;
        int p2 =   ln2.c * ln1.b - ln2.b * ln1.c;
        int bias =  ln1.b*ln2.b;
        double ans = p1*x - p2;
        if (abs(ans)<EPS) return l1.second > l2.second;

        return bias > 0 ? ans < -EPS : ans > EPS;
    }

    bool comp2 (pair<line, int> l1, pair<line, int> l2) {
        line ln1 = l1.first;
        line ln2 = l2.first;
        int p1 =  ln2.b * ln1.a -   ln2.a * ln1.b;
        int p2 =   ln2.c * ln1.a- ln2.a * ln1.c;
        int bias = ln1.a*ln2.a;
        double ans = p1*x - p2;
        if (abs(ans)<EPS) return l1.second > l2.second;

        return bias > 0 ? ans < -EPS : ans > EPS;
    }

    int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(0);
    #ifdef DEBUG
        freopen("input", "r", stdin);//use flush(cout)
    #endif

        cin >> n;

        line lines[n];
        int inter = (  n * ( n - 1)) / 2;
        rep(i, 0, n) {
            cin >> lines[i].a >> lines[i].b >> lines[i].c;
        }
        sort(lines, lines + n, [](line a, line b) {
            int q = (  a.a * b.b) - ( b.a * a.b);
            return   b.b * a.b > 0 ? q < 0 : q > 0;

        });
        rep (i, 0, n)lines[i].id = i;

        int median = (inter & 1) ? inter / 2 + 1 : inter / 2;
        double mx;
        pair<line, int> nums[n];
        rep (i, 0, n) {
            nums[i].first = {lines[i].a, lines[i].b, lines[i].c};
            nums[i].second = lines[i].id;
        }

        double l = -INF * 1.000, r = INF * 1.000;
        int t = 0;
        while ((t++ )< 300 && r-l >EPS) {
              x = (l + r) / 2;
            int tree[n + 1] = {0};

            sort(nums, nums + n,comp1);
            int sect = 0;
            rep (i, 0, n) {
                int id = nums[i].second;
                update(tree, id + 1, 1);
                int inter = read(tree, id + 1);
                sect += i + 1 - inter;

            }
            if (sect >= median) {
                r = x;
            } else {
                l = x;
            }

        }
        cout << fixed;
        cout << setprecision(15) << l << " ";
        sort(lines, lines + n, [](line a, line b) {
                 int q = (  a.b * b.a) - (  b.b * a.a);
                 return   b.a * a.a > 0 ? q < 0 : q > 0;

             }

        );



        rep (i, 0, n)lines[i].id = i;
        l = -INF * 1.000, r = INF * 1.000;
        t=0;
        rep (i, 0, n) {
            nums[i].first = {lines[i].a, lines[i].b, lines[i].c};
            nums[i].second = lines[i].id;
        }

        while ((t++)<300 &&  r-l>EPS) {
              x = (l + r) / 2;
            int tree[n + 1] = {0};


            sort(nums, nums + n, comp2);
            int sect = 0;
            rep (i, 0, n) {
                int id = nums[i].second;
                update(tree, id + 1, 1);
                int inter = read(tree, id + 1);
                sect += i + 1 - inter;

            }
            if (sect >= median) {
                r = x;
            } else {
                l = x;
            }

        }
        cout << setprecision(15) << l << " ";
        return 0;
    }

Measured memory_bytes: 1792