#include <bits/stdc++.h>
#include <complex>
#define ull unsigned long long
#define ll long long
#define pii pair<int, int>
#define N 1000000
#define mod 1000000007
using namespace std;
ll ans = 0;
struct tacka
{
    ll x, y;
};
vector<vector<tacka>> poss;
void subset(vector<tacka>& trenutno, vector<tacka>& tacke, int i, int n)
{
    if(i==n){
        poss.push_back(trenutno);
    }else{
        trenutno.push_back(tacke[i]);
        subset(trenutno, tacke, i+1, n);
        trenutno.pop_back();
        subset(trenutno, tacke, i+1,n);
    }
}
void solve(vector<tacka>& tacke, int n)
{
    vector<tacka> trenutno;
    int cnt = 0;
    subset(trenutno,tacke, cnt, n);
}
bool c(tacka a, tacka b)
{
    if(a.x!=b.x)
        return a.x<b.x;
    return a.y<b.y;
}

int o(tacka a, tacka b, tacka c)
{
    int d = (c.x-b.x)*(b.y-a.y)-(b.x-a.x)*(c.y-b.y);
    if(d<0)return -1;
    if(d>0)return 1;
    return 0;
}


void resi(vector<tacka>& tacke, int n)
{
    if(tacke.size()==0 || tacke.size()==1)
        return;
    tacka Mesi;
    Mesi.x=0;
    Mesi.y=0;
    tacke.push_back(Mesi);
    n++;

    int mn = tacke[0].x, i=0;
    for(int j = 0; j<n; j++)
    {
        if(tacke[j].x<mn)
        {
            mn=tacke[j].x;
            i=j;
        }
    }

    int p1 = i, p2, iter=0;
    do
    {
        if(tacke[p1].x==0 && tacke[p1].y==0)return;
        p2=p1+1;
        if(p2>=n)p2-=n;

        for(int k = 0; k<n; k++)
        {
            if(o(tacke[p1], tacke[k], tacke[p2])==-1)p2=k;
        }
        p1=p2;

    }while(p1!=i);
    ans++;
    return;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);

    int n;cin>>n;
    vector<tacka>tacke(n);
    for(int i = 0; i<n; i++)
    {
        ll a, b;cin>>a>>b;
        tacka t;
        t.x=a;t.y=b;
        tacke[i]=t;
    }
    solve(tacke, n);

    for(auto t : poss)
    {
        resi(t, t.size());
    }
    cout<<ans;



    return 0;
}