#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
struct point{
double x,y;
};
struct TRI{
int x1,x2,x3,y1,y2,y3;
}Tri[60];
struct CIR{
int x,y,r;
}Cir[60];
struct SQU{
int x,y,l;
}Squ[60];
int numT,numC,numS;
void init(){
numT = numC = numS = 0;
}
double cross(point A,point B){
return fabs(A.x*B.y-A.y*B.x);
}
bool judgeT(int x,int y){
double s1,s2,s3,s;
point q,p;
for(int i = 1;i<=numT;i++){
q.x = (double)(Tri[i].x1-x);
q.y = (double)(Tri[i].y1-y);
p.x = (double)(Tri[i].x2-x);
p.y = (double)(Tri[i].y2-y);
s1 = cross(q,p);
q.x = (double)(Tri[i].x1-x);
q.y = (double)(Tri[i].y1-y);
p.x = (double)(Tri[i].x3-x);
p.y = (double)(Tri[i].y3-y);
s2 = cross(q,p);
q.x = (double)(Tri[i].x3-x);
q.y = (double)(Tri[i].y3-y);
p.x = (double)(Tri[i].x2-x);
p.y = (double)(Tri[i].y2-y);
s3 = cross(q,p);
q.x = (double)(Tri[i].x1-Tri[i].x3);
q.y = (double)(Tri[i].y1-Tri[i].y3);
p.x = (double)(Tri[i].x2-Tri[i].x3);
p.y = (double)(Tri[i].y2-Tri[i].y3);
s = cross(q,p);
if(s1+s2+s3==s)return true;
}
return false;
}
bool judgeC(int x,int y){
for(int i=1;i<=numC;i++){
if((x-Cir[i].x)*(x-Cir[i].x)+(y-Cir[i].y)*(y-Cir[i].y)<=Cir[i].r*Cir[i].r)return true;
}
return false;
}
bool judgeS(int x,int y){
for(int i=1;i<=numS;i++){
if(x>=Squ[i].x&&x<=Squ[i].x+Squ[i].l&&y>=Squ[i].y&&y<=Squ[i].y+Squ[i].l)return true;
}
return false;
}
int main(){
int T,n;
char ch[5];
scanf("%d",&T);
while(T--){
init();
scanf("%d",&n);
while(n--){
scanf("%s",ch);
if(ch[0]=='T'){
numT++;
scanf("%d%d%d%d%d%d",&Tri[numT].x1,
&Tri[numT].y1,&Tri[numT].x2,
&Tri[numT].y2,&Tri[numT].x3,&Tri[numT].y3);
}
else if(ch[0]=='C'){
numC++;
scanf("%d%d%d",&Cir[numC].x,&Cir[numC].y,&Cir[numC].r);
}
else{
numS ++;
scanf("%d%d%d",&Squ[numS].x,&Squ[numS].y,&Squ[numS].l);
}
}
int num = 0;
for(int x = -200;x<=200;x++){
for(int y = -200;y<=200;y++){
if(judgeT(x,y)){
num++;
continue;
}
else if(judgeC(x,y)){
num++;
continue;
}
else if(judgeS(x,y)){
num++;
continue;
}
}
}
printf("%d\n",num);
}
return 0;
}