#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e17;
const long long mod = 998244353;
const long long maxN = 300000;
struct frac {
  long long u, d;
};
bool cmp(const frac &a, const frac &b) { return a.u * b.d < a.d * b.u; }
long long a[100006], b[100006];
long long rw[100006], id[100006];
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
signed main() {
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) cin >> a[i] >> b[i];
  vector<long long> ka;
  frac ans1 = {0, 1};
  long long sa = 0;
  for (long long i = 0; i < n; i++) {
    if (a[i] <= b[i]) {
      ka.push_back(b[i]);
      sa += a[i];
    }
  }
  vector<pair<long long, long long> > kb;
  for (long long i = 0; i < n; i++) {
    if (a[i] > b[i]) kb.push_back(pair<long long, long long>(a[i], b[i]));
  }
  sort(kb.begin(), kb.end());
  long long N = kb.size();
  for (long long I = 0; I < N; I++) {
    long long SA = sa;
    vector<long long> KA = ka;
    for (long long j = 0; j < I; j++) {
      SA += kb[j].first;
      KA.push_back(kb[j].second);
    }
    sort(KA.begin(), KA.end());
    long long KKKKK = KA.size();
    for (long long i = KKKKK - 1; i >= 0; i--) {
      SA -= KA[i];
      if (SA <= 0) {
        long long D = KA[i], U = abs(SA);
        U += D * i;
        D *= n;
        long long G = gcd(D, U);
        D /= G;
        U /= G;
        ans1 = max(ans1, {U, D}, cmp);
        break;
      }
    }
  }
  cout << ans1.u << ' ' << ans1.d << endl;
}
