1 #include<iostream>
2 #include<stdio.h>
3 #include<string>
4 using namespace std;
5 struct node{
6 int black;
7 node* first;
8 node* second;
9 node* third;
10 node* forth;
11 };
12 int cur;
13 string str;
14 int flag[1024];
15 void lable(int begin,int end)
16 {
17 for(int i=begin;i<=end;i++)
18 flag[i]=1;
19 }
20 node* build()
21 {
22 node* p=new node;
23 cur++;
24 if(str[cur]=='p')
25 {
26 p->black=0;
27 p->first=build();
28 p->second=build();
29 p->third=build();
30 p->forth=build();
31 }
32 else
33 {
34 p->black=(str[cur]=='f'?1:0);
35 p->first=NULL;
36 p->second=NULL;
37 p->third=NULL;
38 p->forth=NULL;
39 }
40 return p;
41 }
42 void traverse(node *p,int times,int begin)
43 {
44 if(p->first==NULL&&p->second==NULL&&p->third==NULL&&p->forth==NULL)
45 {
46 if(p->black==1)
47 lable(begin,begin+times-1);
48 }
49 else
50 {
51 if(p->first)
52 traverse(p->first,times/4,begin);
53 if(p->second)
54 traverse(p->second,times/4,begin+times/4);
55 if(p->third)
56 traverse(p->third,times/4,begin+times/2);
57 if(p->forth)
58 traverse(p->forth,times/4,begin+(times/4)*3);
59 }
60 }
61 int main()
62 {
63 int n;
64 while(cin>>n)
65 {
66 getchar();
67 for(int c=0;c<n;c++)
68 {
69 getline(cin,str);
70 cur=-1;
71 node* root1=build();
72 traverse(root1,1024,0);
73 getline(cin,str);
74 cur=-1;
75 node* root2=build();
76 traverse(root2,1024,0);
77 int count=0;
78 int i;
79 for(i=0;i<1024;i++)
80 if(flag[i]==1)
81 count++;
82 cout<<"There are "<<count<<" black pixels."<<endl;
83 for(i=0;i<1024;i++)
84 flag[i]=0;
85 }
86 }
87 return 0;
88 }