#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
pair <int,int> v[1001],vec[1000001];
int sgn(pair <int,int> a)
{
int rez;
if(a.first==0)
rez=0;
else if((a.first<0)+(a.second<0)==1)
rez=-1;
else
rez=1;
return rez;
}
bool cmp(pair <int,int> a,pair <int,int> b)
{
int sgn1=sgn(a),sgn2=sgn(b);
if(sgn1!=sgn2)
return sgn1<sgn2;
if(sgn1==0)
return 1;
if(sgn1==1)
return abs(1LL*a.first*b.second)<abs(1LL*a.second*b.first);
return 1LL*abs(a.first)*abs(b.second)>1LL*abs(a.second)*abs(b.first);
}
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
int n,i,j,cntvert=0,cnt=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>v[i].first>>v[i].second;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
if(v[i].first==v[j].first)//verticala
cntvert++;
else
vec[++cnt]={v[i].second-v[j].second,v[i].first-v[j].first};
}
sort(vec+1,vec+cnt+1,cmp);
long long rez=1LL*cntvert*(cntvert-1)/2;
int cnt1=1;
for(i=2;i<=cnt;i++)
if(1LL*vec[i].first*vec[i-1].second==1LL*vec[i].second*vec[i-1].first)
cnt1++;
else
{
rez+=1LL*cnt1*(cnt1-1)/2;
cnt1=1;
}
rez+=1LL*cnt1*(cnt1-1)/2;
cout<<rez;
return 0;
}