#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int N;
int Arb[40005];

struct Line
{
    int a, b, c, pos;
    Line(){}
    Line(int a, int b, int c)
    {
        this -> a = a;
        this -> b = b;
        this -> c = c;
    }
    bool compare(Line x)
    {
        int d = x.a, e = x.b, f = x.c;
        int sign = 1;
        if(a * e - d * b < 0)
            sign *= -1;
        if(e * b < 0)
            sign *= -1;
        return sign == -1;
    }
    bool compare2(Line x)
    {
        int d = x.b, e = x.a, f = x.c;
        int sign = 1;
        int auxa = b, auxb = a;
        if(auxa * e - d * auxb < 0)
            sign *= -1;
        if(e * auxb < 0)
            sign *= -1;
        return sign == -1;
    }

} A[40005];
pair <double, int> A2[40005];

inline bool cmp(Line a, Line b)
{
    return a.compare(b) == 1;
}
void Update(int pos, int val)
{
    while(pos <= N)
    {
        Arb[pos]++;
        pos += (pos & (-pos));
    }
}
int Sum(int pos)
{
    int ans = 0;
    while(pos >= 1)
    {
        ans += Arb[pos];
        pos -= (pos & (-pos));
    }
    return ans;
}
inline double mod(double x)
{
    return max(x, -x);
}
inline bool cmp2(pair <double, int> a, pair <double, int> b)
{
    if(mod(a.first - b.first) < 0.000000000001)
        return a.second > b.second;
    return a.first < b.first;
}
void Solve()
{
    sort(A + 1, A + N + 1, cmp);
    for(int i = 1; i <= N; i++)
    {
        A[i].pos = i;

    }
}

bool check1(double val)
{
    val = (val / (double)1000000000.0);
    for(int i = 1; i <= N; i++)
    {
        Arb[i] = 0;
        A2[i].first = (A[i].c - A[i].a * val) / ((double) A[i].b);
        A2[i].second = i;
    }
    sort(A2 + 1, A2 + N + 1, cmp2);
    long long ans = 0;
    for(int i = 1; i <= N; i++)
    {
        Update(A2[i].second, 1);
        int sum = Sum(N) - Sum(A2[i].second);
        ans += sum;
    }
    return ans >= (1LL * (N * (N - 1) / 2 + 1) / 2);
}

bool check2(double val)
{
    val = (val / (double)1000000000.0);
    for(int i = 1; i <= N; i++)
    {
        Arb[i] = 0;
        A2[i].first = (A[i].c - A[i].b * val) / ((double) A[i].a);
        A2[i].second = i;
    }
    sort(A2 + 1, A2 + N + 1, cmp2);
    long long ans = 0;
    for(int i = 1; i <= N; i++)
    {
        Update(A2[i].second, 1);
        int sum = Sum(N) - Sum(A2[i].second);
        ans += sum;
    }
    return ans >= (1LL * (N * (N - 1) / 2 + 1) / 2);
}
void Read()
{
    cin >> N;
    for(int i = 1; i <= N; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        Line x(a, b, c);
        A[i] = x;
    }
}

double bs1()
{
    long long left = -1000000000000000000, right = -left, mid, sol = left;
    while(left <= right)
    {
        mid = (left + right) / 2;
        if(check1(mid) == 1)
        {
            sol = mid;
            right = mid - 1;
        }
        else
            left = mid + 1;
    }
    return sol;
}

double bs2()
{
    long long left = -1000000000000000000, right = -left, mid, sol = left;
    while(left <= right)
    {
        mid = (left + right) / 2;
        if(mid == 1)
        {
            int a;
            a = 0;
        }
        if(check2(mid) == 1)
        {
            sol = mid;
            right = mid - 1;
        }
        else
            left = mid + 1;
    }
    return sol;
}

inline bool cmp3(Line a, Line b)
{
    return a.compare2(b) == 1;
}
int main()
{
    Read();
    Solve();
    double a = bs1();
    sort(A + 1, A + N + 1, cmp3);
    double  b = bs2();
    cout << fixed << setprecision(15) << a / 1000000000.0 << " " << b / 1000000000.0 << "\n";
    return 0;
}


Measured memory_bytes: 1792