#include<iostream>
#include<string.h>
using namespace std;
int t;
int ret;
int map[4][4];
int check[10000000];
const int dy[] = {0,0,-1,+1};
const int dx[] = {-1,+1,0,0};
void go(int sy, int sx, int cnt, int num){
if(cnt == 7){
check[num] ++;
return;
}
for(int dir = 0; dir < 4; dir++){
int ny = sy + dy[dir];
int nx = sx + dx[dir];
if(ny < 0 || ny >= 4 || nx < 0 || nx >= 4) continue;
go(ny, nx, cnt + 1, num * 10 + map[ny][nx]);
}
}
int main(){
cin >> t;
for(int x = 0; x < t; x++){
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
cin >> map[i][j];
}
}
ret = 0;
memset(check, 0, sizeof(check));
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
go(i,j,0,0);
}
}
for(int i = 0; i < 10000000; i++) if(check[i]) ret++;
cout << "#" << x+1 << ' ' << ret << endl;
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCB0OwppbnQgcmV0OwppbnQgbWFwWzRdWzRdOwppbnQgY2hlY2tbMTAwMDAwMDBdOwogCmNvbnN0IGludCBkeVtdID0gezAsMCwtMSwrMX07CmNvbnN0IGludCBkeFtdID0gey0xLCsxLDAsMH07CiAKdm9pZCBnbyhpbnQgc3ksIGludCBzeCwgaW50IGNudCwgaW50IG51bSl7CiAgaWYoY250ID09IDcpewogICAgY2hlY2tbbnVtXSArKzsKICAgIHJldHVybjsKICB9CiAKICBmb3IoaW50IGRpciA9IDA7IGRpciA8IDQ7IGRpcisrKXsKICAgIGludCBueSA9IHN5ICsgZHlbZGlyXTsKICAgIGludCBueCA9IHN4ICsgZHhbZGlyXTsKIAogICAgaWYobnkgPCAwIHx8IG55ID49IDQgfHwgbnggPCAwIHx8IG54ID49IDQpIGNvbnRpbnVlOwogCiAgICBnbyhueSwgbngsIGNudCArIDEsIG51bSAqIDEwICsgbWFwW255XVtueF0pOwogIH0KfQogCmludCBtYWluKCl7CiAgY2luID4+IHQ7CiAgZm9yKGludCB4ID0gMDsgeCA8IHQ7IHgrKyl7CiAgICAgCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKXsKICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7IGorKyl7CiAgICAgICAgY2luID4+IG1hcFtpXVtqXTsKICAgICAgfQogICAgfQogCiAgICByZXQgPSAwOwogICAgbWVtc2V0KGNoZWNrLCAwLCBzaXplb2YoY2hlY2spKTsgICAgCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgaSsrKXsKICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7IGorKyl7CiAgICAgICAgZ28oaSxqLDAsMCk7ICAgICAgICAKICAgICAgfQogICAgfQogCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDA7IGkrKykgaWYoY2hlY2tbaV0pIHJldCsrOwogCiAgICBjb3V0IDw8ICIjIiA8PCB4KzEgPDwgJyAnIDw8IHJldCA8PCBlbmRsOwogIH0KfQ==