#include <iostream>

using namespace std;

int podskup(int N){
    int P=1;
    for(int j=0;j<N;j++){
        P*=2;
    }
    return (P-1);
}

int varijacija(int N,int K){
    int P=1;
    for(int i=0;i<K;i++){
        P*=(N-i);
        P/=(i+1);
    }
    return P;
}

int main()
{
    long int N;
    cin >> N;
    long int x[N],y[N];
    int GoreDesno=0,DoleDesno=0,GoreLevo=0,DoleLevo=0;
    for(int k=0;k<N;k++){
        cin >> x[k] >> y[k];
        if(x[k]>0){
            if(y[k]>0){
                GoreDesno++;
            }else{
                DoleDesno++;
            }
        }else{
            if(y[k]>0){
                GoreLevo++;
            }else{
                DoleLevo++;
            }
        }
    }
    int n=N;
    long long int M=0;
    while(n>2){
        long int Q[N];
        for(int i=0;i<varijacija(N,n);i++){
            bool pozitivnoy=false,pozitivnox=false,negativnoy=false,negativnox=false;
            for(int j=0;j<n;j++){
                Q[j]=j+1;
            }
            for(int j=i;j>0;j--){
                if(j%n==0)
                    Q[n-1]++;
                else
                    Q[j%n-1]++;

            }

            for(int j=0;j<n;j++){
                for(int l=0;l<n;l++){
                    float kf1=(y[Q[j]]-y[Q[l]]);
                    float kf2=(x[Q[j]]-x[Q[l]]);
                    if(y[Q[j]]>(kf1/kf2)*x[Q[j]]){
                        pozitivnoy=true;
                    }else if(y[Q[j]]<(kf1/kf2)*x[Q[j]]){
                        negativnoy=true;
                    }
                    if(x[Q[j]]>(kf2/kf1)*y[Q[j]]){
                        pozitivnox=true;
                    }else if(y[Q[j]]<(kf2/kf1)*x[Q[j]]){
                        negativnox=true;
                    }
                }
            }
            if(pozitivnox && pozitivnoy && negativnox && negativnoy){
                M++;
            }
        }
        n--;
    }
    cout << M;

    return 0;
}