#include <iostream>
#include <fstream>
#include <cstring>
#include <bitset>
using namespace std;
long long mat[1 << 16];
long long arr[] = {-1,-4,0,1,4};
long long soloUno(long long x,long long i) {
x ^= (1 << i);
return x;
}
bool potenciaDeDos(long long n) {
if(n == 0 or n == 1) return true;
if(n % 2 != 0) return false;
return potenciaDeDos(n >> 1);
}
long long todos(long long x,long long i) {
x ^= (1 << i);
long long aux = i - 1;
if(aux >= 0) x ^= (1 << aux);
aux = i - 4;
if(aux >= 0) x ^= (1 << aux);
aux = i + 1;
if(aux < 16) x ^= (1 << aux);
aux = i + 4;
if(aux < 16) x ^= (1 << aux);
return x;
}
long long dp(long long n) {
long long &r = mat[n];
if(r == -1 and potenciaDeDos(n)) r = 2;
if(r == -1) {
r = 100000;
for(long long i = 0; i < 16; ++i) {
r = min(r,min(2 + dp(soloUno(n,i)),1 + dp(todos(n,i))));
}
}
return r;
}
int main() {
long long lim = 1 << 16;
memset(mat,-1,sizeof mat);
mat[0] = 0;
for(long long i = 1; i < lim; ++i) mat[i] = dp(i);
long long T;
cin >> T;
string s,total;
while(T--) {
total = "";
for(long long i = 0; i < 4; ++i) {
cin >> s;
total += s;
}
bitset<20> bs(total);
cout << mat[bs.to_ulong()] << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxiaXRzZXQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgbWF0WzEgPDwgMTZdOwpsb25nIGxvbmcgYXJyW10gPSB7LTEsLTQsMCwxLDR9OwoKbG9uZyBsb25nIHNvbG9Vbm8obG9uZyBsb25nIHgsbG9uZyBsb25nIGkpIHsKICB4IF49ICgxIDw8IGkpOwogIHJldHVybiB4Owp9Cgpib29sIHBvdGVuY2lhRGVEb3MobG9uZyBsb25nIG4pIHsKICBpZihuID09IDAgb3IgbiA9PSAxKSByZXR1cm4gdHJ1ZTsKICBpZihuICUgMiAhPSAwKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHBvdGVuY2lhRGVEb3MobiA+PiAxKTsKfQoKbG9uZyBsb25nIHRvZG9zKGxvbmcgbG9uZyB4LGxvbmcgbG9uZyBpKSB7CiAgeCBePSAoMSA8PCBpKTsKICBsb25nIGxvbmcgYXV4ID0gaSAtIDE7CiAgaWYoYXV4ID49IDApIHggXj0gKDEgPDwgYXV4KTsKICBhdXggPSBpIC0gNDsKICBpZihhdXggPj0gMCkgeCBePSAoMSA8PCBhdXgpOwogIGF1eCA9IGkgKyAxOwogIGlmKGF1eCA8IDE2KSB4IF49ICgxIDw8IGF1eCk7CiAgYXV4ID0gaSArIDQ7CiAgaWYoYXV4IDwgMTYpIHggXj0gKDEgPDwgYXV4KTsKICByZXR1cm4geDsKfQoKbG9uZyBsb25nIGRwKGxvbmcgbG9uZyBuKSB7CiAgbG9uZyBsb25nICZyID0gbWF0W25dOwogIGlmKHIgPT0gLTEgYW5kIHBvdGVuY2lhRGVEb3MobikpIHIgPSAyOwogIGlmKHIgPT0gLTEpIHsKICAgIHIgPSAxMDAwMDA7CiAgICBmb3IobG9uZyBsb25nIGkgPSAwOyBpIDwgMTY7ICsraSkgewogICAgICByID0gbWluKHIsbWluKDIgKyBkcChzb2xvVW5vKG4saSkpLDEgKyBkcCh0b2RvcyhuLGkpKSkpOwogICAgfQogIH0KICByZXR1cm4gcjsKfQoKaW50IG1haW4oKSB7CiAgbG9uZyBsb25nIGxpbSA9IDEgPDwgMTY7CiAgbWVtc2V0KG1hdCwtMSxzaXplb2YgbWF0KTsKICBtYXRbMF0gPSAwOwogIGZvcihsb25nIGxvbmcgaSA9IDE7IGkgPCBsaW07ICsraSkgbWF0W2ldID0gZHAoaSk7CiAgbG9uZyBsb25nIFQ7CiAgY2luID4+IFQ7CiAgc3RyaW5nIHMsdG90YWw7CiAgd2hpbGUoVC0tKSB7CiAgICB0b3RhbCA9ICIiOwogICAgZm9yKGxvbmcgbG9uZyBpID0gMDsgaSA8IDQ7ICsraSkgewogICAgICBjaW4gPj4gczsKICAgICAgdG90YWwgKz0gczsKICAgIH0KICAgIGJpdHNldDwyMD4gYnModG90YWwpOwogICAgY291dCA8PCBtYXRbYnMudG9fdWxvbmcoKV0gPDwgZW5kbDsKICB9CiAgcmV0dXJuIDA7Cn0K