#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int x1,y1,x2,y2,p;
}a[605];
vector <int> win;
double tot=0.0;
void solve(int cur,int x,int y,int X,int Y,int dep){
if (x==X||y==Y) return;
bool flag=false;
for (int i=cur;i<win.size();i++)
if (a[win[i]].p>dep) {
int x1=a[win[i]].x1,y1=a[win[i]].y1;
int x2=a[win[i]].x2,y2=a[win[i]].y2;
if (x1>X||x2<x||y1>Y||y2<y) continue;
else if (x1<x&&y1<y&&x2>X&&y2>Y) return;
else{
flag=true;
solve(cur+1,x,min(y2,Y),min(x2,X),Y,dep);
solve(cur+1,min(X,x2),max(y1,y),X,Y,dep);
solve(cur+1,max(x,x1),y,X,max(y1,y),dep);
solve(cur+1,x,y,max(x1,x),min(y2,Y),dep);
break;
}
}
if (!flag) tot+=(double)abs((X-x)*(y-Y));
return;
}
char op;
int main(){
int qt=0,qw=-1;
while (scanf("%c",&op)!=EOF){
if (op=='s') {
char id;
scanf("(%c)",&id);
int ID=id-'A';
tot=0;
solve(0,a[ID].x1,a[ID].y1,a[ID].x2,a[ID].y2,a[ID].p);
printf("%.3f\n",tot/(double)abs((a[ID].x2-a[ID].x1)*(a[ID].y1-a[ID].y2))*(double)100);
}
if (op=='w') {
char id;
int x,y,X,Y;
scanf("(%c,%d,%d,%d,%d)\n",&id,&x,&y,&X,&Y);
int ID=id-'A';
bool flag=false;
for (int i=0;i<win.size();i++) if (win[i]==ID){
flag=true;
break;
}
a[ID].x1=min(x,X);
a[ID].y1=min(y,Y);
a[ID].x2=max(x,X);
a[ID].y2=max(y,Y);
qw++;
a[ID].p=qw;
if (!flag) win.push_back(ID);
}
if (op=='t') {
char id;
scanf("(%c)",&id);
int ID=id-'A';
qw++;
a[ID].p=qw;
}
if (op=='b'){
char id;
scanf("(%c)",&id);
int ID=id-'A';
qt--;
a[ID].p=qt;
}
if (op=='d'){
char id;
scanf("(%c)",&id);
int ID=id-'A';
for (int i=0;i<win.size();i++) {
if (win[i]==ID) {
win.erase(win.begin()+i);
break;
}
}
}
}
return 0;
}