uses crt;
type
m=record
x,y:integer;
end;
var
h,g:text;
i,n,j,k,l,u:integer;
a:array[1..100] of m;
function f(x1,y1,x2,y2:integer):real;
var s:boolean;
begin
s:=false;
if (y2=y1) or (x2=x1) then f:=0 else
f:=(y2-y1)/(x2-x1);
end;
function up(x11,y11,x12,y12,x21,y21,x22,y22:integer):boolean;
begin
if ((f(x11,y11,x12,y12)=f(x21,y21,x22,y22)) and (f(x12,y12,x22,y22)<>f(x11,y11,x21,y21)))
or ((f(x11,y11,x12,y12)<>f(x21,y21,x22,y22)) and (f(x12,y12,x22,y22)=f(x11,y11,x21,y21)))
then up:=true else up:=false;
end;
begin
assign(h,'trapez.in'); reset(h);
assign(g,'trapez.out'); rewrite(g);
readln(h, n);
for i:=1 to n do begin
read(h, a[i].x,a[i].y);
readln(h);
end;
for i:=1 to n do
for j:=i+1 to n do
for k:=j+1 to n do
for l:=k+1 to n do
if up(a[i].x,a[i].y,a[j].x,a[j].y,a[k].x,a[k].y,a[l].x,a[l].y)=true then u:=u+1;
writeln(g,u);
close(h);
close(g);
end.