#include<cstdio>
#include<cstring>
const int len = 32;
const int maxn = 1024 + 10;
char s[maxn];
int buf[len][len], cnt;
//把字符串s[p]导出到 以(r,c)为左上角,边长为w的缓存区里
//r,c默认为0,0;W默认为32
void draw(const char* s, int& p, int r, int c, int w) {
char ch = s[p++];//s为字符串
// 2 1
// 3 4
if(ch == 'p') {//如果为中间节点
draw(s, p, r, c+w/2, w/2);//1区域,s,p,横坐标r,纵坐标为,c+w/2
draw(s, p, r, c , w/2); //2
draw(s, p, r+w/2, c , w/2); //3
draw(s, p, r+w/2, c+w/2, w/2); //4
//上面即为画图的过程(利用递归)
} else if(ch == 'f') { //涂黑
for(int i = r; i < r+w; i++)
for(int j = c; j < c+w; j++)
if(buf[i][j] == 0) { buf[i][j] = 1; cnt++; }//涂色并记录
}
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
memset(buf, 0, sizeof(buf));
cnt = 0;
for(int i = 0; i < 2; i++) {//把字符串输入进去
scanf("%s", s);//用%s!
int p = 0;
draw(s, p, 0, 0, len);//p为序号,r,c为0,0;len为长度
}
printf("There are %d black pixels.\n", cnt);
}
return 0;
}
/*
总结:
本题的精彩之处在于边涂色边记录;
思路为 先读入字符串,如果为中间节点递归画图,然后涂色记录;
*/