#include<bits/stdc++.h>
using namespace std;

struct cy{
	string za,zb,zc,zd;
	bool flag=false;
}z[10000];
int s=0;
void dfs(int n,int step,string zs,string ys,string yx,string zx)
{
	if(step==6)
	{
		s++;
		return;
	}
	if(step==0)
	{
		for(int i=0;i<n;i++)
		{
			z[i].flag=true;
			dfs(n,1,z[i].za,z[i].zd," "," ");
			z[i].flag=false;
		}
	}else if(step==1)
	{
		for(int i=0;i<n;i++)
		{
			if(z[i].za==ys&&!z[i].flag)
			{
				z[i].flag=true;
				dfs(n,2,zs,ys,z[i].zd," ");
				z[i].flag=false;
			}
		}
	}else if(step==2)
	{
		for(int i=0;i<n;i++)
		{
			if(z[i].za==yx&&!z[i].flag)
			{
				z[i].flag=true;
				dfs(n,3,zs,ys,yx,z[i].zd);
				z[i].flag=false;
			}
		}
	}else if(step==3)
	{
		for(int i=0;i<n;i++)
		{
			if(z[i].za==zx&&z[i].zd==zs&&!z[i].flag)
			{
				z[i].flag=true;
				dfs(n,4,zs,ys,yx,zx);
				z[i].flag=false;
			}
		}
	}else if(step==4)
	{
		for(int i=0;i<n;i++)
		{
			if(z[i].za==zs&&z[i].zd==yx&&!z[i].flag)
			{
				z[i].flag=true;
				dfs(n,5,zs,ys,yx,zx);
				z[i].flag=false;
			}
		}
	}else if(step==5)
	{
		for(int i=0;i<n;i++)
		{
			if(z[i].za==ys&&z[i].zd==zx&&!z[i].flag)
			{
				z[i].flag=true;
				dfs(n,6,zs,ys,yx,zx);
				z[i].flag=false;
			}
		}
	}
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>z[i].za>>z[i].zb>>z[i].zc>>z[i].zd;
	}
	dfs(n,0," "," "," "," ");
	cout<<s<<endl;
	return 0;
}