#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <functional>
#include <iomanip>
#define vll vector<ll>
#define vvvl vector<vvl>
#define vvl vector<vector<ll>>
#define VV(a, b, c, d) vector<vector<d>>(a, vector<d>(b, c))
#define VVV(a, b, c, d) vector<vvl>(a, vvl(b, vll (c, d)));
#define re(c, b) for(ll c=0;c<b;c++)
#define all(obj) (obj).begin(), (obj).end()
typedef long long int ll;
typedef long double ld;
using namespace std;

ll gcd(ll a, ll b){
  if(b<a) swap(a, b);
  ll r = a % b;
  if(r==0) return b;
  while(r!=0) r = a % b, a = b, b = r;
  return a;
}

struct fraction{
  ll a, b;
  fraction(){};
  fraction(ll A, ll B){// A/B
    if(A==0) B = 1;
    else{
      if(B<0) A*=-1, B*=-1;
      ll g = gcd(abs(A), abs(B));
      A/=g, B/=g;
    }
    a = A, b = B;
  }
  bool operator == (fraction r) const{
    return (this->a==r.a && this->b==r.b);
  }

  bool operator < (fraction r) const {
    __int128_t left = (__int128_t)this->a*(__int128_t)r.b;
    __int128_t right = (__int128_t)r.a*(__int128_t)this->b;
    return left < right;
  }

  bool operator <= (fraction r) const{
    __int128_t left = (__int128_t)this->a*(__int128_t)r.b;
    __int128_t right = (__int128_t)r.a*(__int128_t)this->b;
    std::cout << (ll)left << " " << (ll)right << '\n';
    return left <= right;
  }
  bool operator > (fraction r) const{
    __int128_t left = (__int128_t)this->a*(__int128_t)r.b;
    __int128_t right = (__int128_t)r.a*(__int128_t)this->b;
    return left > right;
  }
  bool operator >= (fraction r) const{
    __int128_t left = (__int128_t)this->a*(__int128_t)r.b;
    __int128_t right = (__int128_t)r.a*(__int128_t)this->b;
    return left >= right;
  }

};
void print(fraction f){
  printf("(%lld / %lld)", f.a, f.b);
}
void println(fraction f){
  printf("(%lld / %lld)\n", f.a, f.b);
}

struct BIT{
  ll M=1;
  vector<ll> dat;
  BIT(ll N){
    while(N>M) M*=2;
    dat.resize(M*2-1, 0);
  }
  void update(ll x, ll k){
    for(int i=k+1;i<=M;i+=(i&(-i))){
      dat[i] += x;
    }
  }
  ll sum(ll r){
    ll ret = 0;
    for(int k=r;k>0;k-=(k&(-k))) ret += dat[k];
    return ret;
  }
  ll query(ll l, ll r){
    return sum(r) - sum(l);
  }
};

ll n;
ld calc(vvl d){
  sort(all(d), [](vll a, vll b){
    return fraction(-a[0], a[1]) < fraction(-b[0], b[1]);
  });

  //for(int i=0;i<n;i++) println(fraction(-d[i][0], d[i][1]));
  ll inter = (n*(n-1))/2;

  //check x
  ld l = -10000000000, r = 10000000000;
  for(int i=0;i<100;i++){
    ld mid = (l+r)/2;
    ll ret = 0;
    map<ld, ll> mp;
    vector<ld> C(n, 0);
    for(int j=0;j<n;j++) {
      ld a = d[j][0], b = d[j][1], c = d[j][2];
      C[j] = (-a*mid+c)/b;
      mp.emplace(C[j], 0);
    }
    BIT bt(mp.size()+1);
    ll cnt = 0;
    for(auto itr=mp.begin();itr!=mp.end();itr++, cnt++) (*itr).second = cnt;
    for(int j=0;j<n;j++){
      ll num = mp.at(C[j]);
      ret += bt.query(0, num+1);
      bt.update(1, num);
    }
    if(ret >= (inter/2 + inter%2)) r = mid;
    else l = mid;
  }

  return r;
}

int main(int argc, char const *argv[]) {
  std::cin >> n;
  vvl d = VV(n, 3, 0, ll);
  for(int i=0;i<n;i++) scanf("%lld %lld %lld", &d[i][0], &d[i][1], &d[i][2]);
  ld ans_x = calc(d);
  for(int i=0;i<n;i++) swap(d[i][0], d[i][1]);
  ld ans_y = calc(d);
  std::cout << fixed << setprecision(20) << ans_x << " " << ans_y << '\n';
  return 0;
}


Measured memory_bytes: 12228