#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cmath>
#include <iomanip>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <bitset>
#include <climits>
#include <cstring>

using namespace std;

#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define SORT(c) sort((c).begin(), (c).end())

typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> V;
typedef map<int, int> M;

constexpr ll INF = 1e18;
constexpr ll MOD = 1e9 + 7;

struct l
{
    double a;
    double b;
    double c;
};

int bit[112345], bit_n;

int bit_sum(int i)
{
    int s = 0;
    while (i > 0)
    {
        s += bit[i];
        i -= i & -i;
    }
    return s;
}

void bit_add(int i, int x)
{
    while (i <= bit_n)
    {
        bit[i] += x;
        i += i & -i;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    l p[41234];

    int n;

    cin >> n;

    REP(i, n)
    cin >> p[i].a >> p[i].b >> p[i].c;

    sort(p, p + n, [](const l &s, const l &t) {
        return ((s.a / s.b) < (t.a / t.b));
    });

    double lx = -10e8, rx = 10e8, ly = -10e8, ry = 10e8;

    int t = ((n * (n - 1) / 2) + 1) / 2;

    REP(z, 200)
    {
        double mid = (lx + rx) / 2;

        bit_n = n + 1;
        memset(bit, 0, sizeof(bit));

        vector<pair<double, int>> v;

        REP(i, n)
        {
            double c = (p[i].c - p[i].a * mid) / p[i].b;

            v.push_back({c, i + 1});
        }

        SORT(v);

        int sum = 0;

        REP(i, n)
        {
            sum += v[i].second - 1 - bit_sum(v[i].second);
            bit_add(v[i].second, 1);
        }

        if (sum < t)
            lx = mid;
        else
            rx = mid;
    }

    sort(p, p + n, [](const l &s, const l &t) {
        return ((s.b / s.a) < (t.b / t.a));
    });

    REP(z, 200)
    {
        double mid = (ly + ry) / 2;

        bit_n = n + 1;
        memset(bit, 0, sizeof(bit));

        vector<pair<double, int>> v;

        REP(i, n)
        {
            double c = (p[i].c - p[i].b * mid) / p[i].a;

            v.push_back({c, i + 1});
        }

        SORT(v);

        int sum = 0;

        REP(i, n)
        {
            sum += v[i].second - 1 - bit_sum(v[i].second);
            bit_add(v[i].second, 1);
        }

        if (sum < t)
            ly = mid;
        else
            ry = mid;
    }

    cout << setprecision(30) << rx << " " << ry << endl;

    return 0;
}