#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int N,copil[20],nr,sol,st[20];
inline int Verif()
{
int team[20],fr[20],nre=0,i,j;
for(i=1;i<=10;++i)
team[i]=fr[i]=0;
for(i=1;i<=N;++i)
{
fr[st[i]]|=copil[i];
team[st[i]]|=(1<<(N-i));
nre=max(nre,st[i]);
}
if(nre<2)
return 0;
for(i=1;i<=nre;++i)
for(j=1;j<=nre;++j)
if(i!=j)
if(!(fr[i]&team[j]))
return 0;
return 1;
}
inline void Back(int k)
{
int i;
if(k==N+1)
{
sol+=Verif();
return;
}
for(i=1;i<=nr;++i)
{
st[k]=i;
Back(k+1);
}
st[k]=++nr;
Back(k+1);
--nr;
}
int main()
{
char sir[20];
int i,j,len;
freopen ("copii.in","r",stdin);
freopen ("copii.out","w",stdout);
scanf("%d", &N);
for(i=1;i<=N;++i)
{
scanf("%s", (sir+1));
len=strlen(sir+1);
for(j=len;j;--j)
if(sir[j]=='1')
copil[i]+=(1<<(len-j));
}
Back(1);
printf("%d\n", sol);
return 0;
}