#include <bits/stdc++.h>

using namespace std;

typedef pair <long ,long> pll;
typedef set<long>::iterator si;
#define t first
#define d second


struct point{
    long long x,y;
};

vector <long> up,down,CH,h;
long long n;
vector <point> p;

bool cw(point a,point b,point c){
    return (b.x - a.x)*(c.y - a.y) - (c.x - a.x)*(b.y - a.y) <= 0;
}

bool acw(point a,point b,point c){
    return (b.x - a.x)*(c.y - a.y) - (c.x - a.x)*(b.y - a.y) >= 0;
}

bool cmp(point a,point b){
    return (a.x < b.x || (a.x==b.x&&a.y<b.y));
}

void ConH(){
    long s = 0;
    long f = n-1;
    up.push_back(s);
    down.push_back(s);
    for (long i = 1;i < n;i++){
        if (i == f || cw(p[s],p[i],p[f])){
            while(up.size() > 1 && !cw(p[up[up.size()-2]],p[up[up.size()-1]],p[i]) ) up.pop_back();
            up.push_back(i);
        }
        if (i == f || acw(p[s],p[i],p[f])){
            while(down.size() > 1 && !acw(p[down[down.size()-2]],p[down[down.size()-1]],p[i]) ) down.pop_back();
            down.push_back(i);
    }

}
}

long long gcd(long long a,long long b){
    if (a == 0) return b;
    if (b == 0) return a;
    if (a > b)swap(a,b);
    return gcd(a,b%a);
}

int main()
{
    ios_base::sync_with_stdio(0);cout.tie(0);cin.tie(0);
    cin >> n;
    p.resize(n);
    for (long i = 0;i < n;i++)cin >> p[i].x >> p[i].y;
    sort(p.begin(),p.end(),cmp);
    ConH();
    long i = 0;
    for (long i = down.size()-2;i > 0;i--)up.push_back(down[i]);
    long long ans = up.size()*(n-1);
    for (long i = 0;i < up.size();i++){
        h.clear();
        long l = up[i],r = up[(i + 2)%up.size()];
        if (p[l].x < p[r].x){
            h.push_back(l);
        for (long i = l+1;i <= r;i++){
            if (i == r || cw(p[l],p[i],p[r])){
            while(h.size() > 1 && !cw(p[h[h.size()-2]],p[h[h.size()-1]],p[i]) ) h.pop_back();
            h.push_back(i);
        }
        }
        }else{
        h.push_back(l);
        for (long i = l+1;i <= r;i++){
            if (i == r || acw(p[l],p[i],p[r])){
            while(h.size() > 1 && !acw(p[h[h.size()-2]],p[h[h.size()-1]],p[i]) ) h.pop_back();
            h.push_back(i);
        }

        }

    }
    ans += h.size();
    ans -= 2;
    }
    ans++;
    cout << ans/gcd(ans,n) << ' ' << n/gcd(ans,n) << '\n';
    return 0;
}
