#include<iostream>
using namespace std;
typedef struct point
{
int x;
int y;
}Point;
Point p[100];
int top=-1;
Point pop()
{
return p[top--];
}
void push(int x1,int y1)
{
top++;
p[top].x=x1;
p[top].y=y1;
}
int temp[500][500];
int ar[500][500];
int ar1[100];
int main()
{
int t;
cin >> t;
for(int o=0; o<t; o++)
{
top=-1;
for(int i=0; i<500; i++)
for(int j=0; j<500; j++)
temp[i][j]=0;
for(int i=0; i<100; i++)
ar1[i]=0;
int acnt;
acnt =0;
int n,cnt=0,max;
cnt=0;
cin >> n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
cin >> temp[i][j];
ar1[cnt]=temp[i][j];
cnt++;
}
}
max=acnt;
for(int i=0; i<cnt; i++)
{
acnt=0;
for(int j=0; j<500; j++)
for(int k=0; k<500; k++)
ar[j][k]=temp[j][k];
for(int j=1; j<=n; j++)
{
for(int k=1; k<=n; k++)
{
if(ar[j][k]<=ar1[i])
ar[j][k]=0;
else
ar[j][k]=1;
}
}
for(int j=1; j<=n; j++)
{
for(int k=1; k<=n; k++)
{
if(ar[j][k]==1)
{
acnt++;
push(j,k);
bool flag=false;
while(top!=-1)
{
Point t=pop();
if(ar[t.x+1][t.y]==1)
{
push(t.x+1,t.y);
flag=true;
}
if(ar[t.x-1][t.y]==1)
{
push(t.x-1,t.y);
flag=true;
}
if(ar[t.x][t.y+1]==1)
{
push(t.x,t.y+1);
flag=true;
}
if(ar[t.x][t.y-1]==1)
{
push(t.x,t.y-1);
flag=true;
}
ar[t.x][t.y]=0;
flag=false;
}
if(acnt>max)
max=acnt;
}
}
}
}
cout << max << endl;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHN0cnVjdCBwb2ludAp7CglpbnQgeDsKCWludCB5Owp9UG9pbnQ7CgpQb2ludCBwWzEwMF07CgoKaW50IHRvcD0tMTsKClBvaW50IHBvcCgpCnsKCXJldHVybiBwW3RvcC0tXTsKfQoKdm9pZCBwdXNoKGludCB4MSxpbnQgeTEpCnsKCXRvcCsrOwoJcFt0b3BdLng9eDE7CglwW3RvcF0ueT15MTsKfQoKaW50IHRlbXBbNTAwXVs1MDBdOwppbnQgYXJbNTAwXVs1MDBdOwppbnQgYXIxWzEwMF07CgppbnQgbWFpbigpCnsKCWludCB0OwoJY2luID4+IHQ7Cglmb3IoaW50IG89MDsgbzx0OyBvKyspCgl7CgkJdG9wPS0xOwoJCWZvcihpbnQgaT0wOyBpPDUwMDsgaSsrKQoJCQlmb3IoaW50IGo9MDsgajw1MDA7IGorKykKCQkJCXRlbXBbaV1bal09MDsKCQlmb3IoaW50IGk9MDsgaTwxMDA7IGkrKykKCQkJYXIxW2ldPTA7CgkJaW50CWFjbnQ7CgkJYWNudCA9MDsKCQlpbnQgbixjbnQ9MCxtYXg7CgkJY250PTA7CgkJY2luID4+IG47CgkJZm9yKGludCBpPTE7IGk8PW47IGkrKykKCQl7CgkJCWZvcihpbnQgaj0xOyBqPD1uOyBqKyspCgkJCXsKCQkJCWNpbiA+PiB0ZW1wW2ldW2pdOwoJCQkJYXIxW2NudF09dGVtcFtpXVtqXTsKCQkJCWNudCsrOwoJCQl9CgkJfQoKCQltYXg9YWNudDsKCQlmb3IoaW50IGk9MDsgaTxjbnQ7IGkrKykKCQl7CgkJCWFjbnQ9MDsKCQkJZm9yKGludCBqPTA7IGo8NTAwOyBqKyspCgkJCQlmb3IoaW50IGs9MDsgazw1MDA7IGsrKykKCQkJCQlhcltqXVtrXT10ZW1wW2pdW2tdOwoKCQkJZm9yKGludCBqPTE7IGo8PW47IGorKykKCQkJewoJCQkJZm9yKGludCBrPTE7IGs8PW47IGsrKykKCQkJCXsKCQkJCQlpZihhcltqXVtrXTw9YXIxW2ldKQoJCQkJCQlhcltqXVtrXT0wOwoJCQkJCWVsc2UKCQkJCQkJYXJbal1ba109MTsKCQkJCX0KCQkJfQoKCQkJCgkJCWZvcihpbnQgaj0xOyBqPD1uOyBqKyspCgkJCXsKCQkJCWZvcihpbnQgaz0xOyBrPD1uOyBrKyspCgkJCQl7CgkJCQkJaWYoYXJbal1ba109PTEpCgkJCQkJewoJCQkJCQlhY250Kys7CgkJCQkJCXB1c2goaixrKTsKCQkJCQkJYm9vbCBmbGFnPWZhbHNlOwoJCQkJCQl3aGlsZSh0b3AhPS0xKQoJCQkJCQl7CgkJCQkJCQlQb2ludCB0PXBvcCgpOwoJCQkJCQkJaWYoYXJbdC54KzFdW3QueV09PTEpCgkJCQkJCQl7CgkJCQkJCQkJcHVzaCh0LngrMSx0LnkpOwoJCQkJCQkJCWZsYWc9dHJ1ZTsKCQkJCQkJCX0KCQkJCQkJCWlmKGFyW3QueC0xXVt0LnldPT0xKQoJCQkJCQkJewoJCQkJCQkJCXB1c2godC54LTEsdC55KTsKCQkJCQkJCQlmbGFnPXRydWU7CgkJCQkJCQl9CgkJCQkJCQlpZihhclt0LnhdW3QueSsxXT09MSkKCQkJCQkJCXsKCQkJCQkJCQlwdXNoKHQueCx0LnkrMSk7CgkJCQkJCQkJZmxhZz10cnVlOwoJCQkJCQkJfQoJCQkJCQkJaWYoYXJbdC54XVt0LnktMV09PTEpCgkJCQkJCQl7CgkJCQkJCQkJcHVzaCh0LngsdC55LTEpOwoJCQkJCQkJCWZsYWc9dHJ1ZTsKCQkJCQkJCX0KCQkJCQkJCWFyW3QueF1bdC55XT0wOwoJCQkJCQkJZmxhZz1mYWxzZTsKCQkJCQkJfQoJCQkJCQlpZihhY250Pm1heCkKCQkJCQkJCW1heD1hY250OwoJCQkJCX0KCQkJCX0JCQkJCgkJCX0KCQl9CgkJY291dCA8PCBtYXggPDwgZW5kbDsKCX0KCXJldHVybiAwOwp9