#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define ALL(v) v.begin(),v.end()
vector<string> g;
int dx[] = { 1, 1, 1, -1, -1, -1, 0, 0 };
int dy[] = { 1, 0, -1, 1, 0, -1, 1, -1 };
map<pair<int, int>, bool> vis;
int bfs(int x, int y){
queue<pair<int, int> >q;
int sz = 1;
pair<int, int> cur;
q.push(mp(x, y));
vector<pair<int, int> >v;;
for (; q.size(); sz = q.size()){
while (sz--){
cur = q.front();
v.push_back(cur);
q.pop();
vis[cur] = true;
for (int i = 0; i < 8; i++){
int xx = cur.first + dx[i], yy = cur.second + dy[i];
if (xx < 0 || yy < 0 || xx >= g.size() || yy >= g[0].size() || g[xx][yy] == '0' || vis[mp(xx, yy)])continue;
q.push(mp(xx, yy));
}
}
}
sort(ALL(v));
return unique(ALL(v)) - v.begin();
}
int sol(){
int c = 0;
for (int i = 0; i < g.size(); i++)
for (int j = 0; j < g[i].size(); j++)
if (g[i][j] == '1' && !vis[mp(i, j)])
c = max(c, bfs(i, j));
return c;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("i.in", "r", stdin);
//freopen("o.out", "w", stdout);
#endif
bool ok = false;
int n;
string s;
scanf("%i\n\n", &n);
while (n--){
if (ok)putchar('\n');
else ok = true;
vis.clear();
g.clear();
while (getline(cin, s) && s.size())g.push_back(s);
printf("%i\n", sol());
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBBTEwodikgdi5iZWdpbigpLHYuZW5kKCkKCnZlY3RvcjxzdHJpbmc+IGc7CmludCBkeFtdID0geyAxLCAxLCAxLCAtMSwgLTEsIC0xLCAwLCAwIH07CmludCBkeVtdID0geyAxLCAwLCAtMSwgMSwgMCwgLTEsIDEsIC0xIH07Cm1hcDxwYWlyPGludCwgaW50PiwgYm9vbD4gdmlzOwoKaW50IGJmcyhpbnQgeCwgaW50IHkpewoJcXVldWU8cGFpcjxpbnQsIGludD4gPnE7CglpbnQgc3ogPSAxOwoJcGFpcjxpbnQsIGludD4gY3VyOwoJcS5wdXNoKG1wKHgsIHkpKTsKCXZlY3RvcjxwYWlyPGludCwgaW50PiA+djs7Cglmb3IgKDsgcS5zaXplKCk7IHN6ID0gcS5zaXplKCkpewoJCXdoaWxlIChzei0tKXsKCQkJY3VyID0gcS5mcm9udCgpOwoJCQl2LnB1c2hfYmFjayhjdXIpOwoJCQlxLnBvcCgpOwoJCQl2aXNbY3VyXSA9IHRydWU7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKXsKCQkJCWludCB4eCA9IGN1ci5maXJzdCArIGR4W2ldLCB5eSA9IGN1ci5zZWNvbmQgKyBkeVtpXTsKCQkJCWlmICh4eCA8IDAgfHwgeXkgPCAwIHx8IHh4ID49IGcuc2l6ZSgpIHx8IHl5ID49IGdbMF0uc2l6ZSgpIHx8IGdbeHhdW3l5XSA9PSAnMCcgfHwgdmlzW21wKHh4LCB5eSldKWNvbnRpbnVlOwoJCQkJcS5wdXNoKG1wKHh4LCB5eSkpOwoJCQl9CgkJfQoJfQoJc29ydChBTEwodikpOwoJcmV0dXJuIHVuaXF1ZShBTEwodikpIC0gdi5iZWdpbigpOwp9CgppbnQgc29sKCl7CglpbnQgYyA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IGcuc2l6ZSgpOyBpKyspCgkJZm9yIChpbnQgaiA9IDA7IGogPCBnW2ldLnNpemUoKTsgaisrKQoJCQlpZiAoZ1tpXVtqXSA9PSAnMScgJiYgIXZpc1ttcChpLCBqKV0pCgkJCQljID0gbWF4KGMsIGJmcyhpLCBqKSk7CglyZXR1cm4gYzsKfQoKaW50IG1haW4oKSB7CiNpZm5kZWYgT05MSU5FX0pVREdFCglmcmVvcGVuKCJpLmluIiwgInIiLCBzdGRpbik7CgkvL2ZyZW9wZW4oIm8ub3V0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKCWJvb2wgb2sgPSBmYWxzZTsKCWludCBuOwoJc3RyaW5nIHM7CglzY2FuZigiJWlcblxuIiwgJm4pOwoJd2hpbGUgKG4tLSl7CgkJaWYgKG9rKXB1dGNoYXIoJ1xuJyk7CgkJZWxzZSBvayA9IHRydWU7CgkJdmlzLmNsZWFyKCk7CgkJZy5jbGVhcigpOwoJCXdoaWxlIChnZXRsaW5lKGNpbiwgcykgJiYgcy5zaXplKCkpZy5wdXNoX2JhY2socyk7CgkJcHJpbnRmKCIlaVxuIiwgc29sKCkpOwoJfQp9