#include<iostream>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
long get(int a,int b,int c,int d)
{
	long ret=a*1000000000L+b*1000000L+c*1000L+d;
	ret=min(ret,b*1000000000L+c*1000000L+d*1000L+a);
	ret=min(ret,c*1000000000L+d*1000000L+a*1000L+b);
	ret=min(ret,d*1000000000L+a*1000000L+b*1000L+c);
	return ret;
}
map<long,set<int> >M;
int a[400],b[400],c[400],d[400];
int N;
int main()
{
	cin>>N;
	for(int i=0;i<N;i++)
	{
		cin>>a[i]>>b[i]>>c[i]>>d[i];
		M[get(a[i],b[i],c[i],d[i])].insert(i);
	}
	long ans=0;
	for(int i=0;i<N;i++)
	{
		for(int j=i+1;j<N;j++)
		{
			for(int r=0;r<4;r++)
			{
				swap(a[j],b[j]);
				swap(b[j],c[j]);
				swap(c[j],d[j]);
				long t[4]={
					get(b[i],a[i],b[j],a[j]),
					get(a[i],d[i],c[j],b[j]),
					get(d[i],c[i],d[j],c[j]),
					get(c[i],b[i],a[j],d[j]),
				};
				int cc[4]={1,1,1,1};
				for(int I=0;I<4;I++)for(int J=I+1;J<4;J++)
				{
					if(t[I]==t[J])cc[I]+=cc[J],cc[J]=0;
				}
				long now=1;
				for(int k=0;k<4;k++)
				{
					if(cc[k]==0)continue;
					if(M.find(t[k])==M.end())
					{
						now=0;
						break;
					}
					int C=M[t[k]].size();
					if(M[t[k]].find(i)!=M[t[k]].end())C--;
					if(M[t[k]].find(j)!=M[t[k]].end())C--;
					int L=1;
					if(t[k]==t[k]%1000*1001001001L)L=4;
					else if(t[k]==t[k]%1000000*1000001L)L=2;
					for(int l=0;l<cc[k];l++)
					{
						now=now*(C-l)*L;
					}
				}
				ans+=now;
			}
		}
	}
	cout<<ans/3<<endl;
}
