#include<bits/stdc++.h>
using namespace std;
#define N 1002
char ma[N][N];
int n,q,mp[N][N],sum[N][N],sz[N][N],dx[]={0,0,1},dy[]={0,1,0},cnt,tot,rt[N*N],f[21][N*N],mi[21][N*N],ok,d[N*N],lg[N*N];
struct edge{
int u,v,w;
bool operator<(edge a){
return w>a.w;
}
}e[N*N*2];
struct Edge{
int v,w;
};
vector<Edge>g[N*N];
int id(int x,int y){
return (x-1)*n+y;
}
int find(int x){
return rt[x]<0?x:rt[x]=find(rt[x]);
}
void merge(int x,int y){
x=find(x);
y=find(y);
if(rt[x]>rt[y]){
swap(x,y);
}
rt[x]+=rt[y];
rt[y]=x;
}
void dfs(int x,int fa){
if(fa){
for(int i=1;i<=lg[d[x]];++i){
f[i][x]=f[i-1][f[i-1][x]];
mi[i][x]=min(mi[i-1][x],mi[i-1][f[i-1][x]]);
}
}
for(auto i:g[x]){
if(i.v^fa){
d[i.v]=d[f[0][i.v]=x]+1;
mi[0][i.v]=i.w;
dfs(i.v,x);
}
}
}
int lca(int x,int y){
if(d[x]<d[y]){
swap(x,y);
}
int ans=1e9;
while(d[x]^d[y]){
ans=min(ans,mi[lg[d[x]-d[y]]][x]);
x=f[lg[d[x]-d[y]]][x];
}
if(x==y){
return ans;
}
for(int i=lg[d[x]];~i;--i){
if(f[i][x]^f[i][y]){
ans=min({ans,mi[i][x],mi[i][y]});
x=f[i][x];
y=f[i][y];
}
}
return ans;
}
int main(){
memset(rt,-1,sizeof rt);
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%s",ma[i]+1);
for(int j=1;j<=n;++j){
lg[id(i,j)]=log2(id(i,j));
if(ma[i][j]^'.'){
mp[i][j]=1;
}else{
++ok;
}
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+mp[i][j];
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(!mp[i][j]){
int l=0,r=n/2;
while(l<=r){
int m=l+r>>1;
if(i+m>n||j+m>n||i-m<1||j-m<1||sum[i+m][j+m]-sum[i+m][j-m-1]-sum[i-m-1][j+m]+sum[i-m-1][j-m-1]){
r=m-1;
}else{
sz[i][j]=m;
l=m+1;
}
}
sz[i][j]=sz[i][j]*2+1;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(!mp[i][j]){
for(int k=1;k<=2;++k){
int x=i+dx[k],y=j+dy[k];
if(x>0&&x<=n&&y>0&&y<=n&&!mp[x][y]){
e[++cnt]={id(i,j),id(x,y),min(sz[i][j],sz[x][y])};
}
}
}
}
}
sort(e+1,e+1+cnt);
for(int i=1;i<=cnt;++i){
if(find(e[i].u)^find(e[i].v)){
merge(e[i].u,e[i].v);
g[e[i].u].push_back({e[i].v,e[i].w});
g[e[i].v].push_back({e[i].u,e[i].w});
if(++tot==ok-1){
break;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(!mp[i][j]&&!f[0][id(i,j)]){
dfs(id(i,j),0);
}
}
}
scanf("%d",&q);
for(int i=1,ax,ay,bx,by;i<=q;++i){
scanf("%d%d%d%d",&ax,&ay,&bx,&by);
if(find(id(ax,ay))^find(id(bx,by))){
puts("0");
continue;
}
printf("%d\n",lca(id(ax,ay),id(bx,by)));
}
}