巨蒟
#include<iostream>
#include<cstdio>
using namespace std;
char a[1100][1100];
int n , m;
int ans , zx , zy;
bool flag[1100][1100];
int mi[4][2] = {{0 , 1} , {0 , -1} , {1 , 0} , {-1 , 0}};
void dfs(int x , int y , int sum){
if(x < 1 or x > n or y < 1 or y > n or (x == zx and y == zy and sum != 0))
return;
ans++;
for(int i = 0; i < 4; ++i){
int x_ = mi[i][0] , y_ = mi[i][1];
if(a[x + x_][y + y_] != a[x][y] and !flag[x][y])
{
flag[x + x_][y + y_] = true;
dfs(x + x_ , y + y_ , sum + 1);
flag[x + x_][y + y_] = false;
}
}
return ;
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n ; ++i){
for(int j = 1; j <= n; ++j){
cin >> a[i][j];
}
}
int x , y;
for(int i = 1; i <= m; ++i){
cin >> x >> y;
zx = x , zy = y ;
if(flag[x][y]){
continue;
}
dfs(x , y , 0);
printf("%d\n", ans);
}
return 0;
}