#include <bits/stdc++.h>

using namespace std;


vector<pair<int, int> > p;
int n;
pair<int, int> point;

int no(int a, int b)
{
    if (a < b)
        swap(a, b);
    while (a > 0 && b > 0)
    {
        a %= b;
        swap(a, b);
    }
    return (a + b);
}

bool sbn(pair<int, int> p1, pair<int, int> p2, pair<int, int> p3)
{
    return (p1.first - p2.first)*(p1.second + p2.second) + (p2.first - p3.first)*(p2.second + p3.second) +
           (p3.first - p1.first)*(p1.second + p3.second) > 0;
}

bool smn(pair<int, int> p1, pair<int, int> p2, pair<int, int> p3)
{
    return (p1.first - p2.first)*(p1.second + p2.second) + (p2.first - p3.first)*(p2.second + p3.second) +
           (p3.first - p1.first)*(p1.second + p3.second) < 0;
}

int op(int w, int num = -1)
{

    vector<pair<int, int> >  up, down;

    if (w == 0)
    {
        up.push_back(p[1]);
        down.push_back(p[1]);
    }
    else
    {
        up.push_back(p[0]);
        down.push_back(p[0]);
    }
    if (w == 0)
        p[0] = p[1];
    if (w == 3)
        p[n-1] = p[n-2];
    for (int i = 1; i < n; i++)
    {
       // cout << i << endl;
        if (w==3 && i == n-1)
            break;
        if (i != num)
        {
            if (!(w == 0 && i == 1))
            {
                int su = up.size();
                int du = down.size();

                if ((i == n-1 || (w == 3 && i == n-2)) || sbn(p[0], p[i], p[n-1]))
                {
                   // cout << "kek " << i;
                    while (up.size() >= 2 && smn(up[su-2], up[su-1], p[i]))
                        {up.pop_back();  }
                    up.push_back(p[i]);
                }
                if ((i == n-1 || (w == 3 && i == n-2)) || smn(p[0], p[i], p[n-1]))
                {
                    //cout << "kek2 " << i;
                    while (down.size() >= 2 && sbn(down[du-2], down[du-1], p[i]))
                        {down.pop_back();}
                    down.push_back(p[i]);
                }
            }
        }
    }
    int ans = down.size() + up.size() - 2;
    return ans;
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> point.first >> point.second;
        p.push_back(point);
    }
    sort(p.begin(), p.end());
    int res = op(0) + op(3);
    //cout << res << endl;
    for (int i = 1; i < n-1; i++)
    {
        res += op(1, i);
    }
    int nod = no(res, n);
    cout << res/nod << ' ' << n/nod;
    return 0;
}
