#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=107;
typedef pair<ll,ll> pii;
int a[N][N],b[N][N];
vector<pii> dp[N][N];
void push(int i,int j,pii &x)
{
int len=dp[i][j].size();
while(len&&dp[i][j][len-1].se<=x.se)
{
len--;
dp[i][j].pop_back();
}
dp[i][j].pb(x);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
dp[i][j].clear();
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
dp[0][0].pb(mp(a[0][0],b[0][0]));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==0&&j==0) continue;
else if(i==0) dp[i][j]=dp[i][j-1];
else if(j==0) dp[i][j]=dp[i-1][j];
else
{
int len1=dp[i-1][j].size(),len2=dp[i][j-1].size();
int p1=0,p2=0;
while(p1<len1&&p2<len2)
{
if(dp[i-1][j][p1].fi<dp[i][j-1][p2].fi) push(i,j,dp[i-1][j][p1++]);
else push(i,j,dp[i][j-1][p2++]);
}
while(p1<len1) push(i,j,dp[i-1][j][p1++]);
while(p2<len2) push(i,j,dp[i][j-1][p2++]);
}
for(auto &it : dp[i][j])
{
it.fi+=a[i][j];
it.se+=b[i][j];
}
}
}
int l=dp[n-1][n-1].size();
ll ans=0;
for(int i=0;i<l;i++)
{
ans=max(ans,dp[n-1][n-1][i].fi*dp[n-1][n-1][i].se);
}
printf("%lld\n",ans);
}
}