#include<iostream>
using namespace std;
int a[10][10];
int cr[10];//颜色
int ans=0,pd=0,n;
void search(int k)
{
if (k == n+1) { ans++; return;}
for (int i=1;i<=4;i++)
{
for (int j=1;j<=n;j++)
if (a[k][j] && cr[j] == i) //如果相邻的点用了这个颜色,就pass掉
{
pd=1;
break;
}
if (!pd) //k相邻点中没有点用这个颜色
{
cr[k] = i;
search(k+1);
}
else pd = 0;
}
cr[k] = 0; //回溯
}
int main()
{
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
cin>>a[i][j];
search(1);
cout<<ans;
}