#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define pip pair<int,pii>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define MOD 1000000007
typedef long long ll;
int dx[]={1,-1,0,0,-1,1,-1,1};
int dy[]={0,0,1,-1,-1,1,1,-1};
vector<string> grid;
vector<pii> points;
vector<pii> visited;
int area=0;
bool isValid(pii point)
{
int x=point.ff; int y=point.ss;
if(x<0 || x>=99 || y<0 || y>=99)
return false;
return true;
}
void dfs(pii start)
{
if(find(visited.begin(),visited.end(),start)!=visited.end())
return;
visited.pb(start);
area++;
int x=start.ff;
int y=start.ss;
for(int k=0;k<8;k++)
{
int nx=x+dx[k];
int ny=y+dy[k];
pii next=make_pair<int,int>(nx,ny);
if(find(visited.begin(),visited.end(),next)==visited.end() && grid[nx][ny]=='W' && isValid(next))
{
dfs(next);
}
}
}
int main()
{
int T;
scanf("%d",&T);
getchar();
getchar();
for(int t=0;t<T;t++)
{
char inp[100];
while(gets(inp) && strlen(inp)>0)
{
if(inp[0]=='L' || inp[0]=='W')
{
string p(inp);
grid.pb(p);
}
else
{
int r,c;
sscanf(inp,"%d %d",&r,&c);
r--;c--;
dfs(make_pair<int,int>(r,c));
cout<<area<<endl;
area=0;
}
}
cout<<endl;
visited.clear();
grid.clear();
points.clear();
}
return 0;
}
CgoKICAgICNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgICAjZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiAgICAjZGVmaW5lIHBpcCBwYWlyPGludCxwaWk+CiAgICAjZGVmaW5lIHBiIHB1c2hfYmFjawogICAgI2RlZmluZSBtcCBtYWtlX3BhaXIKICAgICNkZWZpbmUgZmYgZmlyc3QKICAgICNkZWZpbmUgc3Mgc2Vjb25kCiAgICAjZGVmaW5lIE1PRCAxMDAwMDAwMDA3CgogICAgdHlwZWRlZiBsb25nIGxvbmcgbGw7CiAgICBpbnQgZHhbXT17MSwtMSwwLDAsLTEsMSwtMSwxfTsKICAgIGludCBkeVtdPXswLDAsMSwtMSwtMSwxLDEsLTF9OwoKICAgIHZlY3RvcjxzdHJpbmc+IGdyaWQ7CiAgICB2ZWN0b3I8cGlpPiBwb2ludHM7CiAgICB2ZWN0b3I8cGlpPiB2aXNpdGVkOwogICAgaW50IGFyZWE9MDsKCiAgICBib29sIGlzVmFsaWQocGlpIHBvaW50KQogICAgewogICAgICAgIGludCB4PXBvaW50LmZmOyBpbnQgeT1wb2ludC5zczsKICAgICAgICBpZih4PDAgfHwgeD49OTkgfHwgeTwwIHx8IHk+PTk5KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgdm9pZCBkZnMocGlpIHN0YXJ0KQogICAgewogICAgICAgIGlmKGZpbmQodmlzaXRlZC5iZWdpbigpLHZpc2l0ZWQuZW5kKCksc3RhcnQpIT12aXNpdGVkLmVuZCgpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZpc2l0ZWQucGIoc3RhcnQpOwogICAgICAgIGFyZWErKzsKCiAgICAgICAgaW50IHg9c3RhcnQuZmY7CiAgICAgICAgaW50IHk9c3RhcnQuc3M7CgogICAgICAgIGZvcihpbnQgaz0wO2s8ODtrKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbng9eCtkeFtrXTsKICAgICAgICAgICAgaW50IG55PXkrZHlba107CiAgICAgICAgICAgIHBpaSBuZXh0PW1ha2VfcGFpcjxpbnQsaW50PihueCxueSk7CgogICAgICAgICAgICBpZihmaW5kKHZpc2l0ZWQuYmVnaW4oKSx2aXNpdGVkLmVuZCgpLG5leHQpPT12aXNpdGVkLmVuZCgpICYmIGdyaWRbbnhdW255XT09J1cnICYmIGlzVmFsaWQobmV4dCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRmcyhuZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgaW50IG1haW4oKQogICAgewogICAgICAgIGludCBUOwogICAgICAgIHNjYW5mKCIlZCIsJlQpOwogICAgICAgIGdldGNoYXIoKTsKICAgICAgICBnZXRjaGFyKCk7CgogICAgICAgIGZvcihpbnQgdD0wO3Q8VDt0KyspCiAgICAgICAgewogICAgICAgICAgICBjaGFyIGlucFsxMDBdOwogICAgICAgICAgICB3aGlsZShnZXRzKGlucCkgJiYgc3RybGVuKGlucCk+MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaW5wWzBdPT0nTCcgfHwgaW5wWzBdPT0nVycpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHAoaW5wKTsKICAgICAgICAgICAgICAgICAgICBncmlkLnBiKHApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGludCByLGM7CiAgICAgICAgICAgICAgICAgICAgc3NjYW5mKGlucCwiJWQgJWQiLCZyLCZjKTsKICAgICAgICAgICAgICAgICAgICByLS07Yy0tOwogICAgICAgICAgICAgICAgICAgIGRmcyhtYWtlX3BhaXI8aW50LGludD4ocixjKSk7CiAgICAgICAgICAgICAgICAgICAgY291dDw8YXJlYTw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICBhcmVhPTA7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBjb3V0PDxlbmRsOwogICAgICAgICAgICB2aXNpdGVkLmNsZWFyKCk7CiAgICAgICAgICAgIGdyaWQuY2xlYXIoKTsKICAgICAgICAgICAgcG9pbnRzLmNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgIH0K