/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author aajisaka
 */

#include<bits/stdc++.h>

using namespace std;

void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif

#define SPEED ios_base::sync_with_stdio(false);cin.tie(nullptr)
#define rep(i,n) for(int i=0; i<(int)(n); i++)
#define all(v) v.begin(), v.end()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }

using ll = long long;
using ull = unsigned long long;
using P = pair<ll, ll>;

constexpr long double PI = 3.14159265358979323846264338327950288L;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#include<vector>

class BitSum {
    vector<long long> bit;
    int MAXN;

    // return bit[1] + ... + bit[i]
public: long long sum(int i) {
      long long s = 0;
      while (i > 0) {
        s += bit[i];
        i -= i & -i;
      }
      return s;
    }

    // bit[i] += x
    BitSum(int n) {
      MAXN = n;
      bit.resize(n+1);
    }

public: void add(int i, long long x) {
      while (i <= MAXN) {
        bit[i] += x;
        i += i & -i;
      }
    }

public: void reset() {
      for(int i=0; i<=MAXN; i++) {
        bit.at(i) = 0;
      }
    }

    // return the smallest i where sum(i) >= val
    // If sum(MAXN) < val, return INT_MAX
public: int lower_bound(long long val) {
      int min = 0;
      int max = MAXN;
      if (sum(max) < val) return INT_MAX;
      if (sum(0) >= val) return 0;
      while(min + 1 < max) {
        int now = (min+max)/2;
        if (sum(now) >= val) {
          max = now;
        } else {
          min = now;
        }
      }
      return max;
    }
};


class ECARtesianCoodinate {
public:

    double calc(vector<int>& a, vector<int>& b, vector<int>& c) {
      int n = a.size();
      double mi = -1e10;
      double ma = 1e10;
      vector<pair<double, double>> vec(n);
      vector<double> grad(n);
      BitSum bs(n);
      rep(_, 70) {
        auto med = (mi+ma)/2;
        rep(i, n) {
          // ax + by = c;
          // y = (c-ax)/b
          vec[i].first = (c[i] - a[i]*med)/b[i];
          vec[i].second = ((double)-a[i])/b[i];
          grad[i] = vec[i].second;
          //debug(vec[i].first, vec[i].second);
        }
        sort(all(vec));
        sort(all(grad));
        map<double, int> mp;
        rep(i, n) {
          mp[grad[i]] = i+1;
        }
        bs.reset();
        ll low = 0;
        ll high = 0;
        rep(i, n) {
          int p = mp[vec[i].second];
          //debug(p);
          ll cnt = bs.sum(p);
          high += cnt;
          low += i-cnt;
          bs.add(p, 1);
        }
        //debug(med, low, high);
        if (low <= high) {
          ma = med;
        } else {
          mi = med;
        }
      }
      return mi;
    }


    void solve(istream& cin, ostream& cout) {
      SPEED;
      cout << setprecision(15) << fixed;

      int n; cin >> n;
      vector<int> a(n), b(n), c(n);
      rep(i, n) {
        cin >> a[i] >> b[i] >> c[i];
      }
      /*
      if (n <= 1000) {
        vector<double> x, y;
        for(int i=0; i<n; i++) {
          for(int j=i+1; j<n; j++) {
            y.push_back(((double)(c[i]*a[j]-c[j]*a[i]))/(a[j]*b[i]-b[j]*a[i]));
            swap(a, b);
            x.push_back(((double)(c[i]*a[j]-c[j]*a[i]))/(a[j]*b[i]-b[j]*a[i]));
            swap(a, b);
          }
        }
        sort(all(x));
        sort(all(y));
        int s = x.size();
        s--;
        cout << x[s/2] << ' ' << y[s/2] << endl;
        return;
      }*/

      auto x = calc(a, b, c);
      auto y = calc(b, a, c);
      cout << x << ' ' << y << endl;
    }
};

signed main() {
  ECARtesianCoodinate solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}

Measured memory_bytes: 7720