#include <cstdio>
#include <vector>
#include <algorithm>
#include <functional>

long long gcd(long long a,long long b)
{
  return b==0?a:gcd(b,a%b);
}

int main()
{
  int n;
  scanf("%d",&n);
  std::vector<long long> A(n),B(n);
  for(int i=0;i<n;i++){
    scanf("%lld%lld",&A[i],&B[i]);
  }
  std::vector<std::pair<long long,int> > P(n);
  for(int i=0;i<n;i++){
    P[i]=std::make_pair(std::max(A[i],B[i]),i);
  }
  std::sort(P.begin(),P.end(),std::greater<std::pair<long long,int> >());
  std::vector<long long> SP(n+1);
  SP[0]=0ll;
  for(int i=0;i<n;i++){
    SP[i+1]=SP[i]+P[i].first;
  }
  long long S=0ll;
  for(int i=0;i<n;i++)
    S+=A[i];
  long long ansp=0,ansq=1;
  for(int t=0;t<n;t++){
    int k=P[t].second;
    int c;
    long long s;
    if(SP[t]+B[k]>=S){
      c=std::lower_bound(SP.begin(),SP.end(),S-B[k])-SP.begin();
      s=SP[c];
    }
    else{
      c=std::lower_bound(SP.begin(),SP.end(),S-B[k]+P[t].first)-SP.begin()-1;
      s=SP[c+1]-P[t].first;	     
    }
    long long q=B[k];
    long long p=B[k]*(n-1-c)+(B[k]-std::max(0ll,S-s));
    if(ansp/ansq<p/q||(ansp/ansq==p/q&&(ansp-ansp/ansq*ansq)*q<(p-p/q*q)*ansq)){
      ansp=p;
      ansq=q;
    }
  }
  long long g=gcd(ansp,ansq*n);
  printf("%lld %lld\n",ansp/g,ansq*n/g);
  return 0;
}
