#include <stdio.h>#include <string.h>#define N 20#define M 100001#define clr(a) memset(a,0,sizeof(a))int n;int hash[M];int a[N][N];int dp[M];int error;int ELFhash(char *key){ unsigned long h=0; while(*key){ h=(h << 4) + *key++; unsigned long g=h & 0xf0000000L; if (g) h^= g >> 24; h &= ~g; } return h % M;}int ID(char s[]){ int h = ELFhash(s); if(!hash[h]) hash[h]=++n; return hash[h];}int Enpre(int e[]){ int i,c=0; for(i=1;i<=n;i++){ if(e[i]) c|=1<<(i-1); } return c;}int Count(int e[]){ int c=Enpre(e); if(dp[c]) return dp[c]; if(error) return 0; int i,j,num=0; int z[N],pre,m=0; for(i=1;i<=n;i++){ if(e[i]){ num++; pre=0; for(j=1;j<=n;j++) if(e[j]&&a[j][i]) pre++; if(!pre) z[m++]=i; } } if(!m){ error=1; return 0; } if(num==1){ dp[c]=1; return dp[c]; } int sum=0; for(i=0;i< m;i++){ e[z[i]]=0; sum+=Count(e); e[z[i]]=1; if(error) return 0; } dp[c]=sum; return dp[c];}int main(){ int m; while(scanf("%d",&m)!=EOF){ n=0; clr(hash); clr(a); clr(dp); int i,j,k; char s[N],t[N]; for(k=0;k< m;k++){ scanf("%s%s",s,t); i=ID(s); j=ID(t); a[i][j]=1; } int e[N]; for(i=1;i<=n;i++) e[i]=1; error=0; Count(e); k=Enpre(e); if(error) printf("0n"); else printf("%dn",dp[k]); } return 0;}