{$IFDEF NORMAL}
{$I-,Q-,R-,S-}
{$ENDIF NORMAL}
{$IFDEF DEBUG}
{$I+,Q+,R+,S-}
{$ENDIF DEBUG}
{$IFDEF RELEASE}
{$I-,Q-,R-,S-}
{$ENDIF RELEASE}
type vector=array[1..3] of byte;
smen=record x,y,z:byte; end;
var fi,fo:text;
n,i,j:longint;
m:array[1..100000] of smen;
a:array[1..100000] of longint;
s1,s2:vector;
a1,a2,a3,pp:integer;
aux:longint;
rez:qword;
ok:boolean;
ind:longint;
procedure part(st,dr:longint; var stst,stdr,drst,drdr:longint);
var piv,i,j,aux:longint;
begin
piv:=a[(st+dr) div 2];
i:=st-1;
j:=dr+1;
while i<j do
begin
repeat inc(i) until a[i]>=piv;
repeat dec(j) until a[j]<=piv;
if i<j then
begin
aux:=a[i];
a[i]:=a[j];
a[j]:=aux;
end;
end;
stst:=st;
drdr:=dr;
if i=j then
begin
stdr:=j-1;
drst:=i+1;
end
else
begin
stdr:=j;
drst:=i;
end;
end;
procedure qsort(st,dr:longint);
var stst,stdr,drst,drdr:longint;
begin
if st<dr then
begin
part(st,dr,stst,stdr,drst,drdr);
qsort(stst,stdr);
qsort(drst,drdr);
end;
end;
procedure convert(a1,a2,a3:longint);
var i,j,p:integer;
s,k:string[7];
e:integer;
begin
s:='';
str(a1,k);
s:=s+k;
if a2 div 10>=1 then
begin
str(a2,k);
s:=s+k;
end
else
begin
str(a2,k);
s:=s+'0';
s:=s+k;
end;
if a3 div 10>=1 then
begin
str(a3,k);
s:=s+k;
end
else
begin
str(a3,k);
s:=s+'0';
s:=s+k;
end;
val(s,a[ind],e);
end;
function valid(i,j:longint):boolean;
var p:integer;
begin
valid:=true;
if m[i].x+m[j].x>0 then
p:=m[i].x+m[j].x;
if m[i].y+m[j].y>0 then
if m[i].y+m[j].y<>p then
begin
valid:=false;
exit;
end
else p:=m[i].y+m[j].y;
if m[i].z+m[j].z>0 then
if m[i].z+m[j].z<>p then
begin
valid:=false;
exit;
end;
end;
begin
assign(fi,'puteri.in'); reset(fi);
assign(fo,'puteri.out'); rewrite(fo);
readln(fi,n);
for i:=1 to n do
begin
ind:=i;
read(fi,a1,a2,a3);
convert(a1,a2,a3);
end;
qsort(1,ind);
aux:=n;
for i:=1 to n do
begin
j:=i;
if a[i]=a[i+1] then
while a[j]=a[j+1] do
begin
a[j]:=0;
dec(n);
inc(j);
end;
end;
j:=1;
for i:=1 to aux do
if a[i]<>0 then
begin
aux:=a[i];
pp:=aux mod 100;
aux:=aux div 100;
if pp<0 then ok:=false;
a1:=pp;
pp:=aux mod 100;
aux:=aux div 100;
if pp<0 then ok:=false;
a2:=pp;
pp:=aux mod 100;
aux:=aux div 100;
if pp<0 then ok:=false;
a3:=pp;
m[j].x:=a3;
m[j].y:=a2;
m[j].z:=a1;
inc(j);
end;
for i:=1 to n do
for j:=i+1 to n do
begin
if valid(i,j) then
inc(rez);
end;
writeln(fo,rez);
close(fi);
close(fo);
end.