program exam;
var
i,j,n,sum,t,k:longint;
ans:int64;
p:boolean;
k1,k2,k3:extended;
x,y:array[1..1000] of int64;
a:array[1..1000] of int64;
b:array[1..100,1..100,1..100] of boolean;
function make(n,m:longint):longint;
var
i,j:longint;
a1,b1:int64;
begin
a1:=1;
for i:=1 to m do
a1:=a1*(n-i+1);
b1:=1;
for i:=1 to m do
b1:=b1*i;
a1:=a1 div b1;
exit(a1);
end;
begin
//assign(input,'tri.in');
//reset(input);
//assign(output,'tri.out');
//rewrite(output);
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
ans:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if (b[i,j,k]=false) and (b[i,k,j]=false) and (b[j,i,k]=false) and
(b[j,k,i]=false) and (b[k,i,j]=false) and (b[k,j,i]=false) and
(i<>j) and (i<>k) and (j<>k) then
begin
b[i,j,k]:=true;
b[i,k,j]:=true;
b[j,i,k]:=true;
b[j,k,i]:=true;
b[k,i,j]:=true;
b[k,j,i]:=true;
if (x[i]=x[j]) then
k1:=maxlongint
else
k1:=(y[i]-y[j])/(x[i]-x[j]);
if (x[i]=x[k]) then
k2:=maxlongint
else
k2:=(y[i]-y[k])/(x[i]-x[k]);
if (x[j]=x[k]) then
k3:=maxlongint
else
k3:=(y[j]-y[k])/(x[j]-x[k]);
if (k1<>k2) and (k1<>k3) and (k2<>k3) then
begin
inc(ans);
end;
end;
writeln(ans);
//close(input);
//close(output);
end.