#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int mod=1e9+7;
int n,can[21][21],dp[1<<21];
void add(int& a,int b)
{
	a+=b;
	if(a>=mod)a-=mod;
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>can[i][j];
		dp[0]=1;
	for(int mask=0;mask<(1<<n)-1;mask++)
	{
		int m=__builtin_popcount(mask);
		for(int w=0;w<n;w++)
		{
			if(can[m][w]&&!(mask&(1<<w)))
			{
				int mask2=mask^(1<<w);
				add(dp[mask2],dp[mask]);
			}
		}
	}
	cout<<dp[(1<<n)-1]<<endl;
	return 0;
}