import java.util.*;
import java.io.*;
import static java.
lang.
Math.
max; import static java.
lang.
Math.
min; import static java.
lang.
Math.
abs; public class Main {
public static int mod = (int) 1e9 + 7;
static class FastReader {
public FastReader() {
}
while (st == null || !st.hasMoreTokens()) {
try {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
}
long nextLong() {
return Long.
parseLong(next
()); }
double nextDouble() {
return Double.
parseDouble(next
()); }
try {
str = br.readLine().trim();
e.printStackTrace();
}
return str;
}
}
static class FastWriter {
public FastWriter() {
}
bw.append("" + object);
}
print(object);
bw.append("\n");
}
bw.append("\n");
}
bw.close();
}
public void printLongArr
(long[] arr
) throws IOException { for (long ele : arr) {
print(ele + " ");
}
println();
}
public void printIntArr
(int[] arr
) throws IOException { for (int ele : arr) {
print(ele + " ");
}
println();
}
}
public static long helper(int[][] mat,int mask,int size, long[]dp){
int student
= Integer.
bitCount(mask
); if( student>=size){
return 1;
}
if(dp[mask]!=-1){
return dp[mask];
}
long ans = 0;
for (int topic = 0; topic < size; topic++) {
int currentMask = 1<<topic;
if((mask¤tMask) == 0 && mat[student][topic]==1) {
ans += helper(mat, mask | currentMask, size,dp);
}
}
return dp[mask]=ans;
}
public static void main
try {
FastReader fin = new FastReader();
FastWriter fout = new FastWriter();
int t = fin.nextInt();
while(t-- > 0) {
int n = fin.nextInt();
int[][] likabilityMatrix = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
likabilityMatrix[i][j] = fin.nextInt(); }
}
long[] dp = new long [1<<(n + 1)];
fout.println(helper(likabilityMatrix,0,n,dp));
}
fout.close();
e.printStackTrace();
return;
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwppbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLm1heDsKaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5taW47CmltcG9ydCBzdGF0aWMgamF2YS5sYW5nLk1hdGguYWJzOwpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIGludCBtb2QgPSAoaW50KSAxZTkgKyA3OwoKICAgIHN0YXRpYyBjbGFzcyBGYXN0UmVhZGVyIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBicjsKICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3Q7CgogICAgICAgIHB1YmxpYyBGYXN0UmVhZGVyKCkgewogICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoU3lzdGVtLmluKSk7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgbmV4dCgpIHsKICAgICAgICAgICAgd2hpbGUgKHN0ID09IG51bGwgfHwgIXN0Lmhhc01vcmVUb2tlbnMoKSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gc3QubmV4dFRva2VuKCk7CiAgICAgICAgfQoKICAgICAgICBpbnQgbmV4dEludCgpIHsKICAgICAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobmV4dCgpKTsKICAgICAgICB9CgogICAgICAgIGxvbmcgbmV4dExvbmcoKSB7CiAgICAgICAgICAgIHJldHVybiBMb25nLnBhcnNlTG9uZyhuZXh0KCkpOwogICAgICAgIH0KCiAgICAgICAgZG91YmxlIG5leHREb3VibGUoKSB7CiAgICAgICAgICAgIHJldHVybiBEb3VibGUucGFyc2VEb3VibGUobmV4dCgpKTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBuZXh0TGluZSgpIHsKICAgICAgICAgICAgU3RyaW5nIHN0ciA9ICIiOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgc3RyID0gYnIucmVhZExpbmUoKS50cmltKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyBjbGFzcyBGYXN0V3JpdGVyIHsKICAgICAgICBwcml2YXRlIGZpbmFsIEJ1ZmZlcmVkV3JpdGVyIGJ3OwoKICAgICAgICBwdWJsaWMgRmFzdFdyaXRlcigpIHsKICAgICAgICAgICAgdGhpcy5idyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKFN5c3RlbS5vdXQpKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2b2lkIHByaW50KE9iamVjdCBvYmplY3QpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICAgIGJ3LmFwcGVuZCgiIiArIG9iamVjdCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBwcmludGxuKE9iamVjdCBvYmplY3QpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICAgIHByaW50KG9iamVjdCk7CiAgICAgICAgICAgIGJ3LmFwcGVuZCgiXG4iKTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2b2lkIHByaW50bG4oKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICAgICBidy5hcHBlbmQoIlxuIik7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICAgIGJ3LmNsb3NlKCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBwcmludExvbmdBcnIobG9uZ1tdIGFycikgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgICAgZm9yIChsb25nIGVsZSA6IGFycikgewogICAgICAgICAgICAgICAgcHJpbnQoZWxlICsgIiAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGxuKCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBwcmludEludEFycihpbnRbXSBhcnIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICAgIGZvciAoaW50IGVsZSA6IGFycikgewogICAgICAgICAgICAgICAgcHJpbnQoZWxlICsgIiAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGxuKCk7CiAgICAgICAgfQogICAgfQogICAgcHVibGljIHN0YXRpYyBsb25nIGhlbHBlcihpbnRbXVtdIG1hdCxpbnQgbWFzayxpbnQgc2l6ZSwgbG9uZ1tdZHApewogICAgICAgIGludCBzdHVkZW50ID0gSW50ZWdlci5iaXRDb3VudChtYXNrKTsKICAgICAgICBpZiggc3R1ZGVudD49c2l6ZSl7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBpZihkcFttYXNrXSE9LTEpewogICAgICAgICAgICByZXR1cm4gZHBbbWFza107CiAgICAgICAgfQogICAgICAgIGxvbmcgYW5zID0gMDsKICAgICAgICBmb3IgKGludCB0b3BpYyA9IDA7IHRvcGljIDwgc2l6ZTsgdG9waWMrKykgewogICAgICAgICAgICBpbnQgY3VycmVudE1hc2sgPSAxPDx0b3BpYzsKICAgICAgICAgICAgaWYoKG1hc2smY3VycmVudE1hc2spID09IDAgJiYgbWF0W3N0dWRlbnRdW3RvcGljXT09MSkgewogICAgICAgICAgICAgICAgYW5zICs9IGhlbHBlcihtYXQsIG1hc2sgfCBjdXJyZW50TWFzaywgc2l6ZSxkcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRwW21hc2tdPWFuczsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluCiAgICAgICAgICAgIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgRmFzdFJlYWRlciBmaW4gPSBuZXcgRmFzdFJlYWRlcigpOwogICAgICAgICAgICBGYXN0V3JpdGVyIGZvdXQgPSBuZXcgRmFzdFdyaXRlcigpOwoKICAgICAgICAgICAgaW50IHQgPSBmaW4ubmV4dEludCgpOwogICAgICAgICAgICB3aGlsZSh0LS0gPiAwKSB7CiAgICAgICAgICAgICAgICBpbnQgbiA9IGZpbi5uZXh0SW50KCk7CiAgICAgICAgICAgICAgICBpbnRbXVtdIGxpa2FiaWxpdHlNYXRyaXggPSBuZXcgaW50W25dW25dOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgbGlrYWJpbGl0eU1hdHJpeFtpXVtqXSA9IGZpbi5uZXh0SW50KCk7ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvbmdbXSBkcCA9IG5ldyBsb25nIFsxPDwobiArIDEpXTsKICAgICAgICAgICAgICAgICAgICBBcnJheXMuZmlsbChkcCwtMSk7CiAgICAgICAgICAgICAgICBmb3V0LnByaW50bG4oaGVscGVyKGxpa2FiaWxpdHlNYXRyaXgsMCxuLGRwKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm91dC5jbG9zZSgpOwogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9Cn0K
MwozCjEgMSAxCjEgMSAxCjEgMSAxCjExCjEgMCAwIDEgMCAwIDAgMCAwIDEgMSAKMSAxIDEgMSAxIDAgMSAwIDEgMCAwIAoxIDAgMCAxIDAgMCAxIDEgMCAxIDAgCjEgMCAxIDEgMSAwIDEgMSAwIDEgMSAKMCAxIDEgMSAwIDEgMCAwIDEgMSAxIAoxIDEgMSAwIDAgMSAwIDAgMCAwIDAgCjAgMCAwIDAgMSAwIDEgMCAwIDAgMSAKMSAwIDEgMSAwIDAgMCAwIDAgMCAxIAowIDAgMSAwIDEgMSAwIDAgMCAxIDEgCjEgMSAxIDAgMCAwIDEgMCAxIDAgMSAKMSAwIDAgMCAxIDEgMSAxIDAgMCAwIAoxMQowIDEgMSAxIDAgMSAwIDAgMCAxIDAgCjAgMCAxIDEgMSAxIDEgMSAxIDEgMSAKMSAxIDAgMSAwIDAgMCAwIDAgMSAwIAowIDEgMCAxIDAgMSAwIDEgMCAxIDEgCjEgMCAwIDEgMCAwIDAgMCAxIDAgMSAKMCAwIDEgMCAxIDEgMCAwIDAgMCAxIAoxIDAgMSAwIDEgMSAxIDAgMSAxIDAgCjEgMCAxIDEgMCAxIDEgMCAwIDEgMCAKMCAwIDEgMSAwIDEgMSAxIDEgMSAxIAowIDEgMCAwIDAgMCAwIDAgMCAxIDEgCjAgMSAxIDAgMCAwIDAgMCAxIDAgMSA=
3
3
1 1 1
1 1 1
1 1 1
11
1 0 0 1 0 0 0 0 0 1 1
1 1 1 1 1 0 1 0 1 0 0
1 0 0 1 0 0 1 1 0 1 0
1 0 1 1 1 0 1 1 0 1 1
0 1 1 1 0 1 0 0 1 1 1
1 1 1 0 0 1 0 0 0 0 0
0 0 0 0 1 0 1 0 0 0 1
1 0 1 1 0 0 0 0 0 0 1
0 0 1 0 1 1 0 0 0 1 1
1 1 1 0 0 0 1 0 1 0 1
1 0 0 0 1 1 1 1 0 0 0
11
0 1 1 1 0 1 0 0 0 1 0
0 0 1 1 1 1 1 1 1 1 1
1 1 0 1 0 0 0 0 0 1 0
0 1 0 1 0 1 0 1 0 1 1
1 0 0 1 0 0 0 0 1 0 1
0 0 1 0 1 1 0 0 0 0 1
1 0 1 0 1 1 1 0 1 1 0
1 0 1 1 0 1 1 0 0 1 0
0 0 1 1 0 1 1 1 1 1 1
0 1 0 0 0 0 0 0 0 1 1
0 1 1 0 0 0 0 0 1 0 1