#include<fstream>
using namespace std;
int z[32],t;
int a[32]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97,101,103,107,109,113,127};
int b[129][129][129],i,j,k,u,v,w;
long N,X,r,Y[32];
fstream fin,fout;
void sub(int z[32],int k,int p)
{
if (p<128)
{
if ((k-1)%2==1)
X=X+Y[p];
else X=X-Y[p];
for (int i=z[k-1]+1;i<32;i++)
{
z[k]=i;
sub(z,k+1,p*a[i]);
}
}
}
int main(void)
{
fin.open("puteri.in",ios::in);
fout.open("puteri.out",ios::out);
for (j=0;j<32;j++)
{
t=a[j];
for (u=0;u<=128;u++)
for (v=0;v<=128;v++)
for (w=0;w<=128;w++)
b[u][v][w]=0;
fin>>N;
for (i=1;i<=N;i++)
{
fin>>u>>v>>w;
b[u%t][v%t][w%t]++;
}
Y[j]=0;
for (u=0;u<=t;u++)
for (v=0;v<=t;v++)
for (w=0;w<=t;w++)
if (((t-u)%t==u%t)&&((t-v)%t==v%t)&&((t-w)%t==w%t))
Y[j]=Y[j]+b[u][v][w]*(b[u][v][w]-1)/2;
else Y[j]=Y[j]+b[u][v][w]*b[t-u][t-v][t-w];
fin.close();
fin.open("puteri.in",ios::in);
}
X=0;
z[0]=0;
sub(z,1,1);
fout<<X<<endl;
fin.close();
fout.close();
return 0;
}