#include
using namespace std;
int n;
int mat[22][22];
long long dp[1<<20];
long long rec(int visited) {
if(__builtin_popcount(visited) == n) {
return 1;
}
if(dp[visited] != -1) {
return dp[visited];
}
int at = __builtin_popcount(visited);
long long combinations = 0;
for(int j = 0; j< n ; j++) {
if(mat[at][j] == 1) {
if((visited & (1 << j)) == 0) {
int new_mask = (visited | (1 << j));
combinations += rec(new_mask);
}
}
}
return dp[visited] = combinations;
}
int main() {
int t;
cin >> t;
while(t--) {
cin >> n;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
cin >> mat[i][j];
}
}
memset(dp, -1, sizeof dp);
cout << rec(0) << endl;
}
return 0;
}