# 2. 题解

#include <bits/stdc++.h>
#define LS(a) (a<<1)
#define RS(a) ((a<<1)|1)
using namespace std;
int n,n2,cnt;
double h[205],lst,ans;
struct edge{double x1,x2,y;bool st;}e[205];
bool cmp(edge a,edge b){return a.y<b.y;}
struct N{int s,l,r;double len;}t[1005];
void build(int l,int r,int a)
{
t[a].l=l,t[a].r=r,t[a].len=t[a].s=0;
if(l==r)return;
build(l,(l+r)>>1,LS(a)),build(((l+r)>>1)+1,r,RS(a));
}
void pup(int a)
{
if(t[a].s)t[a].len=h[t[a].r+1]-h[t[a].l];
else if(t[a].l==t[a].r)t[a].len=0;
else t[a].len=t[LS(a)].len+t[RS(a)].len;
}
void update(double l,double r,int d,int a)
{
if(l<=h[t[a].l]&&h[t[a].r+1]<=r){t[a].s+=d,pup(a);return;}
if(l<h[t[LS(a)].r+1])update(l,r,d,LS(a));
if(r>h[t[RS(a)].l])update(l,r,d,RS(a));
pup(a);
}
int main()
{
int T=0;
while(scanf("%d",&n),n)
{
ans=cnt=0,T++,memset(h,-127,sizeof(h));
double x1,y1,x2,y2;n2=n<<1;
for(int i=1;i<=n2;i+=2)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
e[i].x1=x1,e[i].x2=x2,e[i].y=y1,e[i].st=1;
e[i+1].x1=x1,e[i+1].x2=x2,e[i+1].y=y2,e[i+1].st=0;
h[i]=x1,h[i+1]=x2;
}
sort(h+1,h+1+n2),sort(e+1,e+1+n2,cmp);
for(int i=1;i<=n2;i++)if(h[i]!=h[i-1])h[++cnt]=h[i];
build(1,cnt-1,1),lst=e[1].y;
for(int i=1;i<=n2;i++)
{
ans+=(e[i].y-lst)*t[1].len,lst=e[i].y;
if(e[i].st)update(e[i].x1,e[i].x2,1,1);
else update(e[i].x1,e[i].x2,-1,1);
}
printf("Test case #%d\nTotal explored area: %.2f\n\n",T,ans);
}
return 0;
}