#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX = 110;
const int mod = 1e9 + 7;
int add(int a,int b){
if(a+b < mod) return a+b;
return a + b -mod;
}
int n,a[30][30], dp[1<<22][22];
int main(){
cin >> n;
for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> a[i][j];
dp[0][0] = 1;
for(int i = 1; i <= n; i++){
for(int mask = 0; mask < (1<<n); mask++){
for(int j = 0 ; j < n; j++){
if( i != __builtin_popcount(mask)) continue;
if(a[i-1][j] && (mask & 1<<j) ){
dp[mask][i] = add(dp[mask][i], dp[mask^(1<<j)][i-1]);
}
}
}
}
cout << dp[ (1<<n) -1][n] << endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwpjb25zdCBpbnQgTUFYID0gMTEwOwpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKCmludCBhZGQoaW50IGEsaW50IGIpewogICAgaWYoYStiIDwgbW9kKSByZXR1cm4gYStiOwogICAgcmV0dXJuIGEgKyBiIC1tb2Q7Cn0KCgppbnQgbixhWzMwXVszMF0sIGRwWzE8PDIyXVsyMl07CgppbnQgbWFpbigpewoKICAgIGNpbiA+PiBuOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgZm9yKGludCBqID0gMDsgaiA8IG47IGorKykgY2luID4+IGFbaV1bal07CiAgICBkcFswXVswXSA9IDE7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGZvcihpbnQgbWFzayA9IDA7IG1hc2sgPCAoMTw8bik7IG1hc2srKyl7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDAgOyBqIDwgbjsgaisrKXsKICAgICAgICAgICAgICAgIGlmKCBpICE9IF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrKSkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZihhW2ktMV1bal0gJiYgIChtYXNrICYgMTw8aikgKXsKICAgICAgICAgICAgICAgICAgICBkcFttYXNrXVtpXSA9IGFkZChkcFttYXNrXVtpXSwgZHBbbWFza14oMTw8aildW2ktMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBkcFsgKDE8PG4pIC0xXVtuXSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=