package first;
import java.util.Scanner;
public class HuangHou
{
//白色 0 黑色 1
static int m[][];//棋盘 0 不能放 1 能放
static int r[][];//行标志
static int l[][];//列标志
static int d1[][];
static int d2[][];
static int n;
static int sum=0;
//0-白色 1-黑色
public static void f(int row,int color)
{
for(int i=1;i<=n;i++)
{
if(m[row][i]==1&&r[row][color]==0&&l[i][color]==0&&d1[row+i][color]==0&&d2[row-i+n][color]==0)
{
m[row][i]=0;
r[row][color]=1;
l[i][color]=1;
d1[row+i][color]=1;
d2[row-i+n][color]=1;
if(row==n) {
if(color==0)//白色放完了,那么就要放黑色
{
f(1,1);
}else {
sum++;
}
}else {
f(row+1,color);
}
m[row][i]=1;
r[row][color]=0;
l[i][color]=0;
d1[row+i][color]=0;
d2[row-i+n][color]=0;
}
}
}
public static void main(String[] args)
{
Scanner cin= new Scanner(System.in);
n=cin.nextInt();
m=new int[n*3][n*3];
r=new int[n*3][2];
l=new int[n*3][2];
d1=new int[n*3][2];
d2=new int[n*3][2];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
m[i][j]=cin.nextInt();
}
f(1,0);
System.out.println(sum);
}
}