#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 1e9 + 7;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int n;
int a[21][21];
int dp[1 << 21]; // dp[mask] = Số cách ghép những bạn nữ có trong mask với các bạn nam có chỉ số từ 0 đến popcount(mask) - 1
// (popcount(mask) = số bit 1 hay số bạn nữ có trong mask)
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) cin >> a[i][j];
}
for (int mask = 0; mask < (1 << n); mask++) {
if (mask == 0) {
dp[mask] = 1;
continue;
}
dp[mask] = 0;
// Chỉ số của bạn nam hiện tại cần bắt cặp
int i = __builtin_popcount(mask) - 1;
for (int j = 0; j < n; j++) { // Chỉ số của bạn nữ sẽ bắt cặp với bạn nam i
if (!(mask & (1 << j))) continue;
if (!a[i][j]) continue;
int prev_mask = mask ^ (1 << j);
add(dp[mask], dp[prev_mask]);
}
}
cout << dp[(1 << n) - 1] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7IAoKdm9pZCBhZGQoaW50JiBhLCBpbnQgYikgewoJYSArPSBiOyAKCWlmIChhID49IE1PRCkgYSAtPSBNT0Q7IAp9CgppbnQgbjsgCmludCBhWzIxXVsyMV07IAoKaW50IGRwWzEgPDwgMjFdOyAvLyBkcFttYXNrXSA9IFPhu5EgY8OhY2ggZ2jDqXAgbmjhu69uZyBi4bqhbiBu4buvIGPDsyB0cm9uZyBtYXNrIHbhu5tpIGPDoWMgYuG6oW4gbmFtIGPDsyBjaOG7iSBz4buRIHThu6sgMCDEkeG6v24gcG9wY291bnQobWFzaykgLSAxIAoJCQkJIC8vIAkJICAgKHBvcGNvdW50KG1hc2spID0gc+G7kSBiaXQgMSBoYXkgc+G7kSBi4bqhbiBu4buvIGPDsyB0cm9uZyBtYXNrKQogIAppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbjsgCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSBjaW4gPj4gYVtpXVtqXTsgCgl9CgkKCWZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbik7IG1hc2srKykgewoJCWlmIChtYXNrID09IDApIHsKCQkJZHBbbWFza10gPSAxOyAKCQkJY29udGludWU7IAoJCX0KCQlkcFttYXNrXSA9IDA7IAoJCS8vIENo4buJIHPhu5EgY+G7p2EgYuG6oW4gbmFtIGhp4buHbiB04bqhaSBj4bqnbiBi4bqvdCBj4bq3cAoJCWludCBpID0gX19idWlsdGluX3BvcGNvdW50KG1hc2spIC0gMTsgCgkJZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspIHsgLy8gQ2jhu4kgc+G7kSBj4bunYSBi4bqhbiBu4buvIHPhur0gYuG6r3QgY+G6t3AgduG7m2kgYuG6oW4gbmFtIGkKCQkJaWYgKCEobWFzayAmICgxIDw8IGopKSkgY29udGludWU7IAoJCQlpZiAoIWFbaV1bal0pIGNvbnRpbnVlOyAKCQkJaW50IHByZXZfbWFzayA9IG1hc2sgXiAoMSA8PCBqKTsgCgkJCWFkZChkcFttYXNrXSwgZHBbcHJldl9tYXNrXSk7IAoJCX0KCX0KCgljb3V0IDw8IGRwWygxIDw8IG4pIC0gMV0gPDwgJ1xuJzsgCn0=