#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;
const int maxn=700+5;
int n,m,h[maxn][maxn],f[maxn][maxn],vis[maxn][maxn];
int mv[4][2]={1,0,-1,0,0,-1,0,1};
char opt[3];
inline int DP(int x,int y){
if(vis[x][y])
return 0;
if(f[x][y])
return f[x][y];
f[x][y]=1;
for(int i=0;i<4;i++){
int xx=x+mv[i][0],yy=y+mv[i][1];
if(h[xx][yy]>h[x][y])
f[x][y]=max(f[x][y],DP(xx,yy)+1);
}
return f[x][y];
}
signed main(void){
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&h[i][j]);
scanf("%d",&m);int x,y,xx,yy,ans;
while(m--){
scanf("%s",opt);
if(opt[0]==‘C‘)
scanf("%d%d",&x,&y),scanf("%d",&h[x][y]);
else if(opt[0]==‘S‘){
scanf("%d%d%d%d",&x,&y,&xx,&yy);
for(int i=x;i<=xx;i++)
for(int j=y;j<=yy;j++)
vis[i][j]=1;
}
else if(opt[0]==‘B‘){
scanf("%d%d%d%d",&x,&y,&xx,&yy);
for(int i=x;i<=xx;i++)
for(int j=y;j<=yy;j++)
vis[i][j]=0;
}
else{
ans=0;
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
ans=max(ans,DP(i,j));
printf("%d\n",ans);
}
}
return 0;
}