#include<bits/stdc++.h>
using namespace std;
int f[22][(1<<22)-1],a[22][22];
int lowbit(int x)
{
	return x&(-x);
}
int count1(int num)
{
	int ret=0;
	while(num)
	{
		ret++;
		num-=lowbit(num);
	}
	return ret;
}
int main()
{
	int n,i,j,l;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			scanf("%d",&a[i][j]);
	f[0][0]=1;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<(1<<n);j++)
		{
			if(count1(j)!=i)
				continue;
			for(l=0;l<n;l++)
				if((j&(1<<l))!=0&&a[i][n-l]==1)
					f[i][j]=(f[i-1][j^(1<<l)]+f[i][j])%1000000007;
		}
	}
	printf("%d",f[n][(1<<n)-1]);
	return 0;
}