#include <iostream>
#include <stdexcept>
using namespace std;
struct Celula{
int el;
Celula *prox;
};
struct Celula *topo;
int nelem;
void construidor(){
topo=NULL;
nelem=0;
}
void destruidor(){
Celula *aux;
while(topo){
aux=topo;
topo=topo->prox;
delete aux;
}
}
void empilha (const int &el){
Celula *nova = new Celula;
if(nova==NULL){
cout<<"sem memória"<<endl;
}
nova->prox=topo;
nova->el=el;
topo=nova;
nelem++;
}
int desempilha()throw(logic_error){
if(nelem==0) {
throw logic_error("Pilha Vazia\n");
}
int ret = topo->el;
Celula *aux =topo;
topo=topo->prox;
delete aux;
nelem --;
return ret;
}
bool vazia(){
return (nelem==0);
}
int tamanho(){
return (nelem);
}
int main(){
char entrada;
construidor();
int L,C;
cin>>L;
cin>>C;
char matriz[L][C];
char caminho[L][C];
for(int i=0;i<L;i++){
for(int j=0;j<C;j++){
cin>>entrada;
matriz[i][j]=entrada;
caminho[i][j]=entrada;
}
}
int x,y;
while((x!=-1)&&(y!=-1)){
cin>>x;
cin>>y;
if((x!=-1)&&(y!=-1)){
bool preenchido=true;
empilha(x);
empilha(y);
int soma=0;
while(!vazia()){
y=desempilha();
//cout<<y<<endl;
x=desempilha();
//cout<<x<<endl;
if((y>=0)&&(y<C)){
if((x>=0)&&(x<L)){
if(caminho[x][y]!='x'){
caminho[x][y]='x';
empilha(x);
empilha(y+1);
empilha(x-1);
empilha(y);
empilha(x);
empilha(y-1);
empilha(x+1);
empilha(y);
//cout<<matriz[x][y]<<endl;
soma=soma+1;
preenchido=false;
}
}
}
}
if(preenchido!=true){
cout<<soma<<endl;
}
}
for(int i=0;i<L;i++){
for(int j=0;j<C;j++){
caminho[i][j]=matriz[i][j];
}
}
destruidor();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnN0cnVjdCBDZWx1bGF7CiAgICAgICAgaW50IGVsOwogICAgICAgIENlbHVsYSAqcHJveDsKfTsKCnN0cnVjdCBDZWx1bGEgKnRvcG87CmludCBuZWxlbTsKCgp2b2lkIGNvbnN0cnVpZG9yKCl7CgogICAgdG9wbz1OVUxMOwogICAgbmVsZW09MDsKCn0Kdm9pZCBkZXN0cnVpZG9yKCl7CiAgICBDZWx1bGEgKmF1eDsKICAgIHdoaWxlKHRvcG8pewogICAgICAgIGF1eD10b3BvOwogICAgICAgIHRvcG89dG9wby0+cHJveDsKICAgICAgICBkZWxldGUgYXV4OwogICAgfQp9Cgp2b2lkIGVtcGlsaGEgKGNvbnN0IGludCAmZWwpewoKICAgIENlbHVsYSAqbm92YSA9IG5ldyBDZWx1bGE7CiAgICBpZihub3ZhPT1OVUxMKXsKICAgICAgICBjb3V0PDwic2VtIG1lbcOzcmlhIjw8ZW5kbDsKICAgIH0KCiAgICBub3ZhLT5wcm94PXRvcG87CiAgICBub3ZhLT5lbD1lbDsKICAgIHRvcG89bm92YTsKICAgIG5lbGVtKys7Cn0KCmludCBkZXNlbXBpbGhhKCl0aHJvdyhsb2dpY19lcnJvcil7CgogICAgaWYobmVsZW09PTApIHsKICAgICAgICAgICAgdGhyb3cgbG9naWNfZXJyb3IoIlBpbGhhIFZhemlhXG4iKTsKICAgIH0KCgoKICAgIGludCByZXQgPSB0b3BvLT5lbDsKICAgIENlbHVsYSAqYXV4ID10b3BvOwogICAgdG9wbz10b3BvLT5wcm94OwogICAgZGVsZXRlIGF1eDsKICAgIG5lbGVtIC0tOwogICAgcmV0dXJuIHJldDsKCgp9Cgpib29sIHZhemlhKCl7CiAgICByZXR1cm4gKG5lbGVtPT0wKTsKfQoKaW50IHRhbWFuaG8oKXsKICAgIHJldHVybiAobmVsZW0pOwoKfQoKaW50IG1haW4oKXsKCmNoYXIgZW50cmFkYTsKCgogIGNvbnN0cnVpZG9yKCk7CgoKICAgaW50IEwsQzsKCgogICBjaW4+Pkw7CiAgIGNpbj4+QzsKCiAgIGNoYXIgbWF0cml6W0xdW0NdOwogICBjaGFyIGNhbWluaG9bTF1bQ107CgogICBmb3IoaW50IGk9MDtpPEw7aSsrKXsKICAgIGZvcihpbnQgaj0wO2o8QztqKyspewogICAgICAgIGNpbj4+ZW50cmFkYTsKICAgICAgICBtYXRyaXpbaV1bal09ZW50cmFkYTsKICAgICAgICBjYW1pbmhvW2ldW2pdPWVudHJhZGE7CiAgICB9CiAgIH0KCmludCB4LHk7CndoaWxlKCh4IT0tMSkmJih5IT0tMSkpewpjaW4+Png7CmNpbj4+eTsKaWYoKHghPS0xKSYmKHkhPS0xKSl7CiAgICAgICAgYm9vbCBwcmVlbmNoaWRvPXRydWU7CgplbXBpbGhhKHgpOwplbXBpbGhhKHkpOwppbnQgc29tYT0wOwoKd2hpbGUoIXZhemlhKCkpewogICAgeT1kZXNlbXBpbGhhKCk7CiAgICAvL2NvdXQ8PHk8PGVuZGw7CiAgICB4PWRlc2VtcGlsaGEoKTsKICAgIC8vY291dDw8eDw8ZW5kbDsKCiAgICBpZigoeT49MCkmJih5PEMpKXsKICAgICAgICBpZigoeD49MCkmJih4PEwpKXsKICAgICAgICAgICAgaWYoY2FtaW5ob1t4XVt5XSE9J3gnKXsKICAgICAgICAgICAgICAgIGNhbWluaG9beF1beV09J3gnOwogICAgICAgICAgICAgICAgZW1waWxoYSh4KTsKICAgICAgICAgICAgICAgIGVtcGlsaGEoeSsxKTsKICAgICAgICAgICAgICAgIGVtcGlsaGEoeC0xKTsKICAgICAgICAgICAgICAgIGVtcGlsaGEoeSk7CiAgICAgICAgICAgICAgICBlbXBpbGhhKHgpOwogICAgICAgICAgICAgICAgZW1waWxoYSh5LTEpOwogICAgICAgICAgICAgICAgZW1waWxoYSh4KzEpOwogICAgICAgICAgICAgICAgZW1waWxoYSh5KTsKICAgICAgICAgICAgICAgIC8vY291dDw8bWF0cml6W3hdW3ldPDxlbmRsOwogICAgICAgICAgICAgICAgc29tYT1zb21hKzE7CiAgICAgICAgICAgICAgICBwcmVlbmNoaWRvPWZhbHNlOwoKCgoKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCn0KaWYocHJlZW5jaGlkbyE9dHJ1ZSl7CmNvdXQ8PHNvbWE8PGVuZGw7Cn0KfQpmb3IoaW50IGk9MDtpPEw7aSsrKXsKICAgIGZvcihpbnQgaj0wO2o8QztqKyspewogICAgICAgICAgY2FtaW5ob1tpXVtqXT1tYXRyaXpbaV1bal07CgogICAgfQogICB9CmRlc3RydWlkb3IoKTsKfQogICAgcmV0dXJuIDA7CiAgICB9CgoK