#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int a[N][N];
int u[N],d[N],l[N],r[N];
//u:i号色最上
//d:i号色最下
//l:i号色最左
//r:i号色最右
int ans[N];
void Solve()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char ch=getchar();
a[i][j]=int(ch-'0');
}
getchar();
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// cout<<a[i][j]<<" ";
// cout<<endl;
// }
for(int i=0;i<=9;i++) ans[i]=0,u[i]=n+1,d[i]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
u[a[i][j]]=min(u[a[i][j]],i);
d[a[i][j]]=max(d[a[i][j]],i);
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<=9;j++) l[j]=n+1,r[j]=0;
for(int j=1;j<=n;j++)
{
l[a[i][j]]=min(l[a[i][j]],j);
r[a[i][j]]=max(l[a[i][j]],j);
}
for(int j=0;j<=9;j++)
{
ans[j]=max(ans[j],(r[j]-l[j])*max(n-i,i-1));
int h=max(i-u[j],d[j]-i);
int w=max(r[j]-1,n-l[j]);
if(h<0) h=0;
if(w<0) w=0;
ans[j]=max(ans[j],h*w);
}
}
//fen ge xian
for (int i=0;i<=9;i++) l[i]=n+1,r[i]=0;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
l[a[i][j]]=min(l[a[i][j]],j);
r[a[i][j]]=max(r[a[i][j]],j);
}
}
for(int j=1;j<=n;j++)
{
for(int i=0;i<=9;i++) u[i]=n+1,d[i]=0;
for(int i=1;i<=n;i++)
{
u[a[i][j]]=min(u[a[i][j]],i);
d[a[i][j]]=max(d[a[i][j]],i);
}
for(int i=0;i<=9;i++)
{
ans[i]=max(ans[i],(d[i]-u[i])*max(j-1,n-j));
int w=max(j-l[i],r[i]-j);
int h=max(d[i]-1,n-u[i]);
if (h<0) h=0;
if (w<0) w=0;
ans[i]=max(ans[i],h*w);
}
}
for(int i=0;i<=9;i++) cout<<ans[i]<<" ";
cout<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int T;cin>>T;
while(T--) Solve();
return 0;
}
错的莫名其妙,提交记录