#include <bits/stdc++.h>
using namespace std;
struct Node {
int x, y, z;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) {
int X, Y, Z;
cin >> X >> Y >> Z;
swap(X,Z );
// grid[z][x][y] để nhất quán với (i,j,k)
vector<vector<vector<int>>> grid(Z, vector<vector<int>>(X, vector<int>(Y)));
for (int k = 0; k < Z; ++k) {
for (int i = 0; i < X; ++i) {
string s;
cin >> s;
for (int j = 0; j < Y; ++j)
grid[k][i][j] = s[j] - '0';
}
}
vector<vector<vector<bool>>> vis(Z, vector<vector<bool>>(X, vector<bool>(Y, false)));
int total = 0;
int dx[6] = {1, -1, 0, 0, 0, 0};
int dy[6] = {0, 0, 1, -1, 0, 0};
int dz[6] = {0, 0, 0, 0, 1, -1};
for (int k = 0; k < Z; ++k)
for (int i = 0; i < X; ++i)
for (int j = 0; j < Y; ++j)
if (grid[k][i][j] == 1 && !vis[k][i][j]) {
// BFS để tìm khối liên thông
queue<Node> q;
q.push({i, j, k});
vis[k][i][j] = true;
int minx = i, maxx = i;
int miny = j, maxy = j;
int minz = k, maxz = k;
while (!q.empty()) {
Node cur = q.front();
q.pop();
for (int d = 0; d < 6; ++d) {
int nx = cur.x + dx[d];
int ny = cur.y + dy[d];
int nz = cur.z + dz[d];
if (nx >= 0 && nx < X && ny >= 0 && ny < Y && nz >= 0 && nz < Z) {
if (!vis[nz][nx][ny] && grid[nz][nx][ny] == 1) {
vis[nz][nx][ny] = true;
q.push({nx, ny, nz});
minx = min(minx, nx);
maxx = max(maxx, nx);
miny = min(miny, ny);
maxy = max(maxy, ny);
minz = min(minz, nz);
maxz = max(maxz, nz);
}
}
}
}
int a = maxx - minx + 1;
int b = maxy - miny + 1;
int c = maxz - minz + 1;
total += min({a, b, c});
}
cout << total << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZSB7CmludCB4LCB5LCB6Owp9OwoKaW50IG1haW4oKSB7Cmlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKY2luLnRpZShudWxscHRyKTsKCgppbnQgVDsKY2luID4+IFQ7CndoaWxlIChULS0pIHsKICAgIGludCBYLCBZLCBaOwogICAgY2luID4+IFggPj4gWSA+PiBaOwpzd2FwKFgsWiApOwogICAgLy8gZ3JpZFt6XVt4XVt5XSDEkeG7gyBuaOG6pXQgcXXDoW4gduG7m2kgKGksaixrKQogICAgdmVjdG9yPHZlY3Rvcjx2ZWN0b3I8aW50Pj4+IGdyaWQoWiwgdmVjdG9yPHZlY3RvcjxpbnQ+PihYLCB2ZWN0b3I8aW50PihZKSkpOwogICAgZm9yIChpbnQgayA9IDA7IGsgPCBaOyArK2spIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFg7ICsraSkgewogICAgICAgICAgICBzdHJpbmcgczsKICAgICAgICAgICAgY2luID4+IHM7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgWTsgKytqKQogICAgICAgICAgICAgICAgZ3JpZFtrXVtpXVtqXSA9IHNbal0gLSAnMCc7CiAgICAgICAgfQogICAgfQoKICAgIHZlY3Rvcjx2ZWN0b3I8dmVjdG9yPGJvb2w+Pj4gdmlzKFosIHZlY3Rvcjx2ZWN0b3I8Ym9vbD4+KFgsIHZlY3Rvcjxib29sPihZLCBmYWxzZSkpKTsKICAgIGludCB0b3RhbCA9IDA7CgogICAgaW50IGR4WzZdID0gezEsIC0xLCAwLCAwLCAwLCAwfTsKICAgIGludCBkeVs2XSA9IHswLCAwLCAxLCAtMSwgMCwgMH07CiAgICBpbnQgZHpbNl0gPSB7MCwgMCwgMCwgMCwgMSwgLTF9OwoKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgWjsgKytrKQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgWDsgKytpKQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFk7ICsraikKICAgICAgICAgICAgICAgIGlmIChncmlkW2tdW2ldW2pdID09IDEgJiYgIXZpc1trXVtpXVtqXSkgewogICAgICAgICAgICAgICAgICAgIC8vIEJGUyDEkeG7gyB0w6xtIGto4buRaSBsacOqbiB0aMO0bmcKICAgICAgICAgICAgICAgICAgICBxdWV1ZTxOb2RlPiBxOwogICAgICAgICAgICAgICAgICAgIHEucHVzaCh7aSwgaiwga30pOwogICAgICAgICAgICAgICAgICAgIHZpc1trXVtpXVtqXSA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGludCBtaW54ID0gaSwgbWF4eCA9IGk7CiAgICAgICAgICAgICAgICAgICAgaW50IG1pbnkgPSBqLCBtYXh5ID0gajsKICAgICAgICAgICAgICAgICAgICBpbnQgbWlueiA9IGssIG1heHogPSBrOwoKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBOb2RlIGN1ciA9IHEuZnJvbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcS5wb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgZCA9IDA7IGQgPCA2OyArK2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBueCA9IGN1ci54ICsgZHhbZF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnkgPSBjdXIueSArIGR5W2RdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG56ID0gY3VyLnogKyBkeltkXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChueCA+PSAwICYmIG54IDwgWCAmJiBueSA+PSAwICYmIG55IDwgWSAmJiBueiA+PSAwICYmIG56IDwgWikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmlzW256XVtueF1bbnldICYmIGdyaWRbbnpdW254XVtueV0gPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNbbnpdW254XVtueV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2goe254LCBueSwgbnp9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlueCA9IG1pbihtaW54LCBueCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHggPSBtYXgobWF4eCwgbngpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW55ID0gbWluKG1pbnksIG55KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4eSA9IG1heChtYXh5LCBueSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnogPSBtaW4obWlueiwgbnopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXh6ID0gbWF4KG1heHosIG56KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGludCBhID0gbWF4eCAtIG1pbnggKyAxOwogICAgICAgICAgICAgICAgICAgIGludCBiID0gbWF4eSAtIG1pbnkgKyAxOwogICAgICAgICAgICAgICAgICAgIGludCBjID0gbWF4eiAtIG1pbnogKyAxOwogICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IG1pbih7YSwgYiwgY30pOwogICAgICAgICAgICAgICAgfQoKICAgIGNvdXQgPDwgdG90YWwgPDwgIlxuIjsKfQpyZXR1cm4gMDsKCgp9Cg==