#include<bits/stdc++.h>
typedef long long i64;
const i64 M=(1ll<<40)-1;
int n,a[407][4],t[407],tx[407];
i64 f[407],f0[407],_cnt,ans=0;
i64 min(i64 a,i64 b){return a<b?a:b;}
i64 cal(i64 a,i64 b,i64 c,i64 d){
	i64 ab=a<<10|b,abc=ab<<10|c;
	i64 cd=c<<10|d,bcd=b<<20|cd;
	return min(min(abc<<10|d,d<<30|abc),min(cd<<20|ab,bcd<<10|a));
}
int $(i64 x){
	int p=std::lower_bound(f,f+n,x)-f;
	return f[p]==x?p:-1;
}
void dec(i64 x){
	int p=$(x);
	if(p!=-1)--t[p];
}
void inc(i64 x){
	int p=$(x);
	if(p!=-1)++t[p];
}
void cal(i64 x){
	int p=$(x);
	if(p!=-1){
		_cnt*=t[p]*tx[p];
		--t[p];
	}else _cnt=0;
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;++i){
		int*A=a[i];
		for(int j=0;j<4;++j)scanf("%d",A+j);
		f0[i]=f[i]=cal(A[0],A[1],A[2],A[3]);
	}
	std::sort(f,f+n);
	f[n]=M;
	for(int i=0,j=0;i<n;i=j){
		for(++j;f[i]==f[j];++j);
		t[i]=j-i;
		tx[i]=1;
		i64 x=f[i];
		if(x==((x>>20|x<<20)&M)){
			tx[i]=2;
			if(x==((x>>30|x<<10)&M))tx[i]=4;
		}
	}
	for(int i=1;i<n;++i){
		dec(f0[i]);
		for(int j=0;j<i;++j){
			dec(f0[j]);
			int*A=a[i],*B=a[j];
			for(int k=0;k<4;++k){
				i64 vs[4];
				_cnt=1;
				for(int t=0;t<4;++t){
					vs[t]=cal(A[k-t&3],A[k-t-1&3],B[t&3],B[t-1&3]);
					cal(vs[t]);
				}
				for(int t=0;t<4;++t)inc(vs[t]);
				ans+=_cnt;
			}
			inc(f0[j]);
		}
		inc(f0[i]);
	}
	printf("%lld\n",ans/3);
	return 0;
}