1 #include <iostream>
2 #include <vector>
3 #include <cstdio>
4 #include <cstring>
5 #include <algorithm>
6 #include <cmath>
7 #include <map>
8 #include <set>
9 #include <string>
10 #include <queue>
11 #include <stack>
12 #include <bitset>
13 using namespace std;
14 #define pb(x) push_back(x)
15 #define ll long long
16 #define mk(x, y) make_pair(x, y)
17 #define lson l, m, rt<<1
18 #define mem(a) memset(a, 0, sizeof(a))
19 #define rson m+1, r, rt<<1|1
20 #define mem1(a) memset(a, -1, sizeof(a))
21 #define mem2(a) memset(a, 0x3f, sizeof(a))
22 #define rep(i, n, a) for(int i = a; i<n; i++)
23 #define fi first
24 #define se second
25 typedef pair<int, int> pll;
26 const double PI = acos(-1.0);
27 const double eps = 1e-8;
28 const int mod = 1e9+7;
29 const int inf = 1061109567;
30 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
31 const int maxn = 500;
32 struct segment
33 {
34 double l, r, h;
35 int flag;
36 segment(){}
37 segment(double l, double r, double h, int flag):l(l), r(r), h(h), flag(flag){}
38 bool operator < (segment a) const
39 {
40 return h<a.h;
41 }
42 }line[maxn];
43 double a[maxn], sum[maxn<<2];
44 int cover[maxn<<2];
45 void pushUp(int rt, int l, int r) {
46 if(cover[rt]) {
47 sum[rt] = a[r+1]-a[l];
48 } else if(l == r) {
49 sum[rt] = 0;
50 } else {
51 sum[rt] = sum[rt<<1]+sum[rt<<1|1];
52 }
53 }
54 void update(int L, int R, int l, int r, int rt, int flag) {
55 if(L<=l&&R>=r) {
56 cover[rt] += flag;
57 pushUp(rt, l-1, r-1);
58 return ;
59 }
60 int m = l+r>>1;
61 if(L<=m)
62 update(L, R, lson, flag);
63 if(R>m)
64 update(L, R, rson, flag);
65 pushUp(rt, l-1, r-1);
66 }
67 int main()
68 {
69 int n, cnt, k = 1;
70 double x1, y1, x2, y2;
71 while(scanf("%d", &n)&&n) {
72 cnt = 0;
73 mem(cover);
74 for(int i = 0; i<n; i++) {
75 scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
76 line[cnt] = segment(x1, x2, y1, 1);
77 a[cnt++] = x1;
78 line[cnt] = segment(x1, x2, y2, -1);
79 a[cnt++] = x2;
80 }
81 sort(a, a+cnt);
82 sort(line, line+cnt);
83 double ans = 0;
84 int num = unique(a, a+cnt)-a;
85 for(int i = 0; i<cnt; i++) {
86 int L = lower_bound(a, a+num, line[i].l)-a+1;
87 int R = lower_bound(a, a+num, line[i].r)-a;
88 update(L, R, 1, num, 1, line[i].flag);
89 ans += sum[1]*(line[i+1].h-line[i].h);
90 }
91 printf("Test case #%d\n", k++);
92 printf("Total explored area: %.2f\n\n", ans);
93 }
94 return 0;
95 }