#include<bits/stdc++.h>
using namespace std;
struct Point{long double px,py;};
long double dot(const Point& a,const Point& b){
return a.px*b.px+a.py*b.py;
}
long double crs(const Point& a,const Point& b){
return a.px*b.py-a.py*b.px;
}
long double norm(const Point& a){
return a.px*a.px+a.py*a.py;
}
int ccw(Point p0,Point p1,Point p2){
Point a,b;
a.px=p1.px-p0.px;
a.py=p1.py-p0.py;
b.px=p2.px-p0.px;
b.py=p2.py-p0.py;
if(crs(a,b)>1e-10)return 1;
if(crs(a,b)<-1e-10)return -1;
if(dot(a,b)<-1e-10)return 2;
if(norm(a)<norm(b))return -2;
return 0;
}
bool its(Point p1,Point p2,Point p3,Point p4){
return ((ccw(p1,p2,p3)*ccw(p1,p2,p4)<=0)&&(ccw(p3,p4,p1)*ccw(p3,p4,p2)<=0));
}
int n;Point D[3000];vector<pair<int,int>>K;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>D[i].px>>D[i].py;
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
bool ok=true;
for(int k=0;k<K.size();k++){
if(i==K[k].first||j==K[k].second){continue;}
if(j==K[k].first||i==K[k].second){continue;}
if(its(D[K[k].first],D[K[k].second],D[i],D[j])==1){ok=false;}
}
if(ok==true){K.push_back(make_pair(i,j));}
}
}
cout<<K.size()<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IFBvaW50e2xvbmcgZG91YmxlIHB4LHB5O307CmxvbmcgZG91YmxlIGRvdChjb25zdCBQb2ludCYgYSxjb25zdCBQb2ludCYgYil7CglyZXR1cm4gYS5weCpiLnB4K2EucHkqYi5weTsKfQpsb25nIGRvdWJsZSBjcnMoY29uc3QgUG9pbnQmIGEsY29uc3QgUG9pbnQmIGIpewoJcmV0dXJuIGEucHgqYi5weS1hLnB5KmIucHg7Cn0KbG9uZyBkb3VibGUgbm9ybShjb25zdCBQb2ludCYgYSl7CglyZXR1cm4gYS5weCphLnB4K2EucHkqYS5weTsKfQppbnQgY2N3KFBvaW50IHAwLFBvaW50IHAxLFBvaW50IHAyKXsKCVBvaW50IGEsYjsKCWEucHg9cDEucHgtcDAucHg7CglhLnB5PXAxLnB5LXAwLnB5OwoJYi5weD1wMi5weC1wMC5weDsKCWIucHk9cDIucHktcDAucHk7CglpZihjcnMoYSxiKT4xZS0xMClyZXR1cm4gMTsKCWlmKGNycyhhLGIpPC0xZS0xMClyZXR1cm4gLTE7CglpZihkb3QoYSxiKTwtMWUtMTApcmV0dXJuIDI7CglpZihub3JtKGEpPG5vcm0oYikpcmV0dXJuIC0yOwoJcmV0dXJuIDA7Cn0KYm9vbCBpdHMoUG9pbnQgcDEsUG9pbnQgcDIsUG9pbnQgcDMsUG9pbnQgcDQpewoJcmV0dXJuICgoY2N3KHAxLHAyLHAzKSpjY3cocDEscDIscDQpPD0wKSYmKGNjdyhwMyxwNCxwMSkqY2N3KHAzLHA0LHAyKTw9MCkpOwp9CmludCBuO1BvaW50IERbMzAwMF07dmVjdG9yPHBhaXI8aW50LGludD4+SzsKaW50IG1haW4oKXsKCWNpbj4+bjsKCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWNpbj4+RFtpXS5weD4+RFtpXS5weTsKCX0KCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCWZvcihpbnQgaj1pKzE7ajxuO2orKyl7CgkJCWJvb2wgb2s9dHJ1ZTsKCQkJZm9yKGludCBrPTA7azxLLnNpemUoKTtrKyspewoJCQkJaWYoaT09S1trXS5maXJzdHx8aj09S1trXS5zZWNvbmQpe2NvbnRpbnVlO30KCQkJCWlmKGo9PUtba10uZmlyc3R8fGk9PUtba10uc2Vjb25kKXtjb250aW51ZTt9CgkJCQlpZihpdHMoRFtLW2tdLmZpcnN0XSxEW0tba10uc2Vjb25kXSxEW2ldLERbal0pPT0xKXtvaz1mYWxzZTt9CgkJCX0KCQkJaWYob2s9PXRydWUpe0sucHVzaF9iYWNrKG1ha2VfcGFpcihpLGopKTt9CgkJfQoJfQoJY291dDw8Sy5zaXplKCk8PGVuZGw7CglyZXR1cm4gMDsKfQo=