#include <bits/stdc++.h>
using namespace std;
const int md = 1e9 + 7;
int n, cnt;
vector<int> dp = {1};
vector<vector<int>> check;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("matching.inp", "r", stdin);
freopen("matching.out", "w", stdout);
cin >> n;
dp.resize(1 << n);
check.resize(n, vector<int>(n));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> check[i][j];
for (int mask = 1; mask < (1 << n); mask++)
{
cnt = __builtin_popcount(mask);
for (int j = 0; j < n; j++)
if (mask >> j & 1 && check[cnt - 1][j])
(dp[mask] += dp[mask ^ (1 << j)]) %= md;
}
cout << dp.back();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtZCA9IDFlOSArIDc7CmludCBuLCBjbnQ7CnZlY3RvcjxpbnQ+IGRwID0gezF9Owp2ZWN0b3I8dmVjdG9yPGludD4+IGNoZWNrOwppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgZnJlb3BlbigibWF0Y2hpbmcuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJtYXRjaGluZy5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICBjaW4gPj4gbjsKICAgIGRwLnJlc2l6ZSgxIDw8IG4pOwogICAgY2hlY2sucmVzaXplKG4sIHZlY3RvcjxpbnQ+KG4pKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICBjaW4gPj4gY2hlY2tbaV1bal07CiAgICBmb3IgKGludCBtYXNrID0gMTsgbWFzayA8ICgxIDw8IG4pOyBtYXNrKyspCiAgICB7CiAgICAgICAgY250ID0gX19idWlsdGluX3BvcGNvdW50KG1hc2spOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICBpZiAobWFzayA+PiBqICYgMSAmJiBjaGVja1tjbnQgLSAxXVtqXSkKICAgICAgICAgICAgICAgIChkcFttYXNrXSArPSBkcFttYXNrIF4gKDEgPDwgaildKSAlPSBtZDsKICAgIH0KICAgIGNvdXQgPDwgZHAuYmFjaygpOwogICAgcmV0dXJuIDA7Cn0=