#include<bits/stdc++.h>
using namespace std;
string s1,s2,s3,s4;
struct chyu
{
	string hd,ed;
	chyu(){}
	chyu(string a,string b)
	{
		hd=a,ed=b;
	}
}k[10002];
bool operator<(const chyu a,const chyu b)
{
	return true;
}
map<string,vector<int> >h;
map<string,map<string,bool> >hv;
int n;
long long ans;
int number[4];
string nw; 
void dfs(int d=1,int id=0)
{
	if(d==1)
	{
		for(int i=1;i<=n;i++)
			if(h[k[i].ed].size())
				number[0]=i,nw=k[i].hd,dfs(2,i);
	}
	if(d==2)
	{
		for(int i=0;i<h[k[id].ed].size();i++)
		{
			if(h[k[id].ed][i]!=number[0])
				if(hv[k[id].hd][k[h[k[id].ed][i]].ed])
					number[1]=h[k[id].ed][i],dfs(3,h[k[id].ed][i]);
		}
	}
	if(d==3)
	{
		for(int i=0;i<h[k[id].ed].size();i++)
		{
			if(h[k[id].ed][i]!=number[0] && h[k[id].ed][i]!=number[1])
				if(hv[k[id].hd][k[h[k[id].ed][i]].ed])
					number[2]=h[k[id].ed][i],dfs(4,h[k[id].ed][i]);
		}
	}
	if(d==4)
	{
		for(int i=0;i<h[k[id].ed].size();i++)
		{
			if(h[k[id].ed][i]!=number[0] && h[k[id].ed][i]!=number[1] && h[k[id].ed][i]!=number[2] && k[h[k[id].ed][i]].ed==nw)
			number[3]=h[k[id].ed][i];
			for(int j=0;j<h[k[number[0]].ed].size();j++)
			{
				if(h[k[number[0]].ed][j]!=number[0] && h[k[number[0]].ed][j]!=number[1] && h[k[number[0]].ed][j]!=number[2] && h[k[number[0]].ed][j]!=number[3] && k[h[k[number[0]].ed][j]].ed==k[number[2]].ed)
				{
					ans++;
					return 0;
				} 
			}
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s1>>s2>>s3>>s4;
		k[i].hd=s1,k[i].ed=s4;
		hv[s1][s4]=true;
		h[s1].push_back(i);
	}
	dfs();
	cout<<ans;
	return 0;
}