#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>

using LL = long long ;
const int kN = 100000 + 5;
int n;
double a[kN], b[kN], c[kN];
double v[kN];
std::pair<double, double> f[kN];

struct Umr {
    std::vector<double> x;

    Umr() = default;

    Umr(double *begin, double *end) : x(begin, end)
    {
        std::sort(x.begin(), x.end());
        x.erase(std::unique(x.begin(), x.end()), x.end());
    }

    int get(double val) const
    {
        return std::lower_bound(x.begin(), x.end(), val) - x.begin();
    }
} sv;

struct Fenwick {
    int cnt[kN];

    void clear()
    {
        memset(cnt, 0, sizeof(cnt));
    }

    void modify(int p, int dt)
    {
        for (int i = p; i < kN; i += ~i & i + 1) cnt[i] += dt;
    }

    int query(int p)
    {
        int ret = 0;
        for (int i = p; i >= 0; i -= ~i & i + 1) ret += cnt[i];
        return ret;
    }
} bit;

LL calc(double mid)
{
    for (int i = 0; i < n; ++ i) {
        f[i] = std::make_pair(-a[i] / b[i], (c[i] - a[i] * mid) / b[i]);
        v[i] = f[i].second;
    }
    sv = Umr(v, v + n);
    bit.clear();
    std::sort(f, f + n);
    LL ret = 0;
    for (int i = 0; i < n; ++ i) {
        ret += bit.query(sv.get(f[i].second));
        bit.modify(sv.get(f[i].second), 1);
    }
    return ret;
}

double solve()
{
    double l = -1e9, r = 1e9;
    for (int step = 0; step < 120; ++ step) {
        double mid = (l + r) * .5;
        LL cnt = calc(mid);
        if (cnt * 2 < n * 1LL * (n - 1) / 2)
            l = mid;
        else r = mid;
    }

    return r;
}

void work()
{
    double x = solve();
    for (int i = 0; i < n; ++ i)
        std::swap(a[i], b[i]);
    double y = solve();

    printf("%.13f %.13f\n", x, y);
}

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; ++ i) {
        scanf("%lf%lf%lf", a + i, b + i, c + i);
    }
    work();
}
