#include<vector>
#include<algorithm>
#include<iostream>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
using namespace std;
#define mp make_pair
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;
map<pair<int, int>, int>m;
int bfs(int x, int y){
//printf("%i %i\n", x, y);
queue<pair<int, int> >q;
int sz = 1;
pair<int, int> cur;
q.push(mp(x, y));
map<pair<int, int>, int>m;
for (; q.size(); sz = q.size()){
while (sz--){
cur = q.front();
m[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;
//printf("%i %i\n", xx, yy);
q.push(mp(xx, yy));
}
}
}
//printf("%i\n", m.size());
return m.size();
}
int dfs(int x, int y){
vis[mp(x, y)] = true;
for (int i = 0; i < 8; i++){
int xx = x + dx[i], yy = y + dy[i];
if (xx < 0 || yy < 0 || xx >= g.size() || yy >= g[x].size() || g[xx][yy] == '0' || vis[mp(xx, yy)])continue;
return 1 + dfs(xx, yy);
}
return 0;
}
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());
}
}
I2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbXAgbWFrZV9wYWlyCgp2ZWN0b3I8c3RyaW5nPiBnOwppbnQgZHhbXSA9IHsgMSwgMSwgMSwgLTEsIC0xLCAtMSwgMCwgMCB9OwppbnQgZHlbXSA9IHsgMSwgMCwgLTEsIDEsIDAsIC0xLCAxLCAtMSB9OwptYXA8cGFpcjxpbnQsIGludD4sIGJvb2w+IHZpczsKbWFwPHBhaXI8aW50LCBpbnQ+LCBpbnQ+bTsKCmludCBiZnMoaW50IHgsIGludCB5KXsKCS8vcHJpbnRmKCIlaSAlaVxuIiwgeCwgeSk7CglxdWV1ZTxwYWlyPGludCwgaW50PiA+cTsKCWludCBzeiA9IDE7CglwYWlyPGludCwgaW50PiBjdXI7CglxLnB1c2gobXAoeCwgeSkpOwoJbWFwPHBhaXI8aW50LCBpbnQ+LCBpbnQ+bTsKCWZvciAoOyBxLnNpemUoKTsgc3ogPSBxLnNpemUoKSl7CgkJd2hpbGUgKHN6LS0pewoJCQljdXIgPSBxLmZyb250KCk7CgkJCW1bY3VyXTsKCQkJcS5wb3AoKTsKCQkJdmlzW2N1cl0gPSB0cnVlOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKyl7CgkJCQlpbnQgeHggPSBjdXIuZmlyc3QgKyBkeFtpXSwgeXkgPSBjdXIuc2Vjb25kICsgZHlbaV07CgkJCQlpZiAoeHggPCAwIHx8IHl5IDwgMCB8fCB4eCA+PSBnLnNpemUoKSB8fCB5eSA+PSBnWzBdLnNpemUoKSB8fCBnW3h4XVt5eV0gPT0gJzAnIHx8IHZpc1ttcCh4eCwgeXkpXSljb250aW51ZTsKCQkJCS8vcHJpbnRmKCIlaSAlaVxuIiwgeHgsIHl5KTsKCQkJCXEucHVzaChtcCh4eCwgeXkpKTsKCQkJfQoJCX0KCX0KCS8vcHJpbnRmKCIlaVxuIiwgbS5zaXplKCkpOwoJcmV0dXJuIG0uc2l6ZSgpOwp9CgppbnQgZGZzKGludCB4LCBpbnQgeSl7CgoJdmlzW21wKHgsIHkpXSA9IHRydWU7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspewoJCWludCB4eCA9IHggKyBkeFtpXSwgeXkgPSB5ICsgZHlbaV07CgkJaWYgKHh4IDwgMCB8fCB5eSA8IDAgfHwgeHggPj0gZy5zaXplKCkgfHwgeXkgPj0gZ1t4XS5zaXplKCkgfHwgZ1t4eF1beXldID09ICcwJyB8fCB2aXNbbXAoeHgsIHl5KV0pY29udGludWU7CgkJcmV0dXJuIDEgKyBkZnMoeHgsIHl5KTsKCX0KCglyZXR1cm4gMDsKfQoKaW50IHNvbCgpewoJaW50IGMgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBnLnNpemUoKTsgaSsrKQoJCWZvciAoaW50IGogPSAwOyBqIDwgZ1tpXS5zaXplKCk7IGorKykKCQkJaWYgKGdbaV1bal0gPT0gJzEnICYmICF2aXNbbXAoaSwgaildKQoJCQkJYyA9IG1heChjLCBiZnMoaSwgaikpOwoJcmV0dXJuIGM7Cn0KCmludCBtYWluKCkgewojaWZuZGVmIE9OTElORV9KVURHRQoJZnJlb3BlbigiaS5pbiIsICJyIiwgc3RkaW4pOwoJLy9mcmVvcGVuKCJvLm91dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCglib29sIG9rID0gZmFsc2U7CglpbnQgbjsKCXN0cmluZyBzOwoJc2NhbmYoIiVpXG5cbiIsICZuKTsKCXdoaWxlIChuLS0pewoJCWlmIChvaylwdXRjaGFyKCdcbicpOwoJCWVsc2Ugb2sgPSB0cnVlOwoJCXZpcy5jbGVhcigpOwoJCWcuY2xlYXIoKTsKCQl3aGlsZSAoZ2V0bGluZShjaW4sIHMpICYmIHMuc2l6ZSgpKWcucHVzaF9iYWNrKHMpOwoJCXByaW50ZigiJWlcbiIsIHNvbCgpKTsKCX0KfQ==