#include <fstream>
#include <algorithm>
#define DIM 1000000
#define f first
#define s second
using namespace std;
ifstream fin ("trapez.in" );
ofstream fout("trapez.out");
int N, M, i, j, K, ok, X1, X2, Y1, Y2, sum;
pair <int, int> V[DIM], W[DIM]; int aux, nr;
void SetUp(){
fin >> M;
for(i = 1; i <= M; i ++)
fin >> W[i].f >> W[i].s;
/*
SETEZ PUNCTELE CU ORIGINEA IN (O, O)
*/
for(i = 1; i < M; i ++){
for(j = i+1; j <= M; j ++){
X1 = W[i].f;
X2 = W[j].f;
Y1 = W[i].s;
Y2 = W[j].s;
if(Y1 > Y2){
aux = X1;
X1 = X2;
X2 = aux;
aux = Y1;
Y1 = Y2;
Y2 = aux;
}
X2 -= X1; X1 = 0;
Y2 -= Y1; Y1 = 0;
N ++;
V[N].f = X2;
V[N].s = Y2;
}
}
return;
}
int cmp(int a, int b){
int X1, X2, Y1, Y2;
X1 = V[a].f;
X2 = V[b].f;
Y1 = V[a].s;
Y2 = V[b].s;
return ((X1 * (-1)) / Y1) > ((X2 * (-1)) / Y2);
}
void Sort(){
//sort(V + 1, V + N + 1, cmp);
return;
}
void GetSol(){
V[0].f = V[0].s = -100000;
for(i = 1; i <= N + 1; i ++){
X1 = V[i-1].f;
Y1 = V[i-1].s;
X2 = V[i].f;
Y2 = V[i].s;
if(((X1 * (-1))) == ((X2 * (-1)))){
nr ++;
}
else{
sum += (nr * (nr - 1)) / 2;
nr = 1;
}
}
fout << sum+1;
return;
}
int main(){
SetUp();
Sort();
GetSol();
return 0;
}