RT
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+1;
int fa[N],area[N],n,m;
char c[N];
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int zip(int i,int j)//二维压缩成一维
{
return (i-1)*m+j;
}
void init(int n)//初始化
{
for(int i=1;i<=n;i++) fa[i]=i;
}
int find(int i)//查询父节点
{
if(fa[i]==i) return i;
else
{
fa[i]=find(fa[i]);
return fa[i];
}
}
void unionn(int i,int j)//合并
{
int k=0;
if(find(i)!=find(j)) k=area[find(i)];
fa[find(i)]=find(j);
area[fa[j]]+=k;
}
void compare(int num)//比较k个点面积大小
{
int x,y,ans=0,maxn=0;
for(int i=1;i<=num;i++)
{
x=read();y=read();
if(c[zip(x,y)]=='*') continue;
int k=area[fa[zip(x,y)]];
if(k>maxn)
{
maxn=k;
ans=i;
}
}
if(ans==0) cout<<1<<endl;
else cout<<ans<<endl;
return ;
}
int qx[4]={-1,0,0,1},qy[4]={0,-1,1,0};
void change(int num)
{
while(num--)
{
int x,y;
x=read();y=read();
int k=zip(x,y);
if(c[k]=='.')
{
area[fa[k]]-=1;
c[k]='*';
}
else
{
c[k]='.';
for(int i=0;i<4;i++)
{
int nx=x+qx[i],ny=y+qy[i];
if(nx<=0||ny<=0||nx>n||ny>m) continue;
int k1=zip(nx,ny);
if(area[fa[k1]]!=-1)unionn(k,k1);
}
}
}
return ;
}
bool vis[N];
void dfs(int x,int y,int d)
{
int k=zip(x,y);
if(vis[k]||x<=0||y<=0||x>n||y>m||c[k]=='*') return;
vis[k]=true;
unionn(k,d);
if(x>1)dfs(x-1,y,d);
if(x<n)dfs(x+1,y,d);
if(y>1)dfs(x,y-1,d);
if(y<m)dfs(x,y+1,d);
}
int main()
{
memset(area,-1,sizeof(area));
n=read();m=read();
init(n*m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int k=zip(i,j);
cin>>c[k];
if(c[k]=='.')
{
area[k]=1;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int k=zip(i,j);
dfs(i,j,k);
}
}
int Q,op,q;
Q=read();
while(Q--)
{
op=read();q=read();
if(op==1) compare(q);
if(op==2) change(q);
}
return 0;
}