#include <bits/stdc++.h>
using namespace std;
vector<long long> dis;
vector<bool> cyc;
int cycV, cycU;
void findDistance(auto &G, int v, int p, long long d, bool findAnswer = false) {
dis[v] = d;
for (auto u : G[v]) {
if (u == p || (findAnswer && cyc[u])) continue;
findDistance(G, u, v, d + 1);
}
}
bool captureCycleVert(auto &G, int v, int p = -1) {
if (v == cycU) return cyc[v] = true;
for (auto u : G[v]) {
if (u == p) continue;
if (captureCycleVert(G, u, v)) {
return cyc[v] = true;
}
}
return cyc[v];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
for (int T = 1; T <= t; T++) {
int n;
cin >> n;
vector<vector<int>> G(n);
dis.assign(n, 0);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
u--, v--;
G[u].push_back(v);
G[v].push_back(u);
}
findDistance(G, 0, -1, 0);
cycV = max_element(dis.begin(), dis.end()) - dis.begin();
findDistance(G, cycV, -1, 0);
cycU = max_element(dis.begin(), dis.end()) - dis.begin();
cyc.assign(n, false);
captureCycleVert(G, cycV);
long long ans = 0;
for (int i = 0; i < n; i++) {
if (cyc[i]) findDistance(G, i, -1, 0, true);
}
ans = accumulate(dis.begin(), dis.end(), 0ll);
cout << "Case " << T << ": " << ans << "\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8bG9uZyBsb25nPiBkaXM7CnZlY3Rvcjxib29sPiBjeWM7CgppbnQgY3ljViwgY3ljVTsKCnZvaWQgZmluZERpc3RhbmNlKGF1dG8gJkcsIGludCB2LCBpbnQgcCwgbG9uZyBsb25nIGQsIGJvb2wgZmluZEFuc3dlciA9IGZhbHNlKSB7CglkaXNbdl0gPSBkOwoJZm9yIChhdXRvIHUgOiBHW3ZdKSB7CgkJaWYgKHUgPT0gcCB8fCAoZmluZEFuc3dlciAmJiBjeWNbdV0pKSBjb250aW51ZTsKCQlmaW5kRGlzdGFuY2UoRywgdSwgdiwgZCArIDEpOwoJfQp9Cgpib29sIGNhcHR1cmVDeWNsZVZlcnQoYXV0byAmRywgaW50IHYsIGludCBwID0gLTEpIHsKCWlmICh2ID09IGN5Y1UpIHJldHVybiBjeWNbdl0gPSB0cnVlOwoJZm9yIChhdXRvIHUgOiBHW3ZdKSB7CgkJaWYgKHUgPT0gcCkgY29udGludWU7CgkJaWYgKGNhcHR1cmVDeWNsZVZlcnQoRywgdSwgdikpIHsKCQkJcmV0dXJuIGN5Y1t2XSA9IHRydWU7CgkJfQoJfQoJcmV0dXJuIGN5Y1t2XTsKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKG51bGxwdHIpOwoKCWludCB0OwoJY2luID4+IHQ7Cglmb3IgKGludCBUID0gMTsgVCA8PSB0OyBUKyspIHsKCQlpbnQgbjsKCQljaW4gPj4gbjsKCgkJdmVjdG9yPHZlY3RvcjxpbnQ+PiBHKG4pOwoJCWRpcy5hc3NpZ24obiwgMCk7CgoJCWZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CgkJCWludCB1LCB2OwoJCQljaW4gPj4gdSA+PiB2OwoJCQl1LS0sIHYtLTsKCQkJR1t1XS5wdXNoX2JhY2sodik7CgkJCUdbdl0ucHVzaF9iYWNrKHUpOwoJCX0KCgkJZmluZERpc3RhbmNlKEcsIDAsIC0xLCAwKTsgICAgICAgICAKCQljeWNWID0gbWF4X2VsZW1lbnQoZGlzLmJlZ2luKCksIGRpcy5lbmQoKSkgLSBkaXMuYmVnaW4oKTsKCQlmaW5kRGlzdGFuY2UoRywgY3ljViwgLTEsIDApOwoJCWN5Y1UgPSBtYXhfZWxlbWVudChkaXMuYmVnaW4oKSwgZGlzLmVuZCgpKSAtIGRpcy5iZWdpbigpOwoKCQljeWMuYXNzaWduKG4sIGZhbHNlKTsKCQljYXB0dXJlQ3ljbGVWZXJ0KEcsIGN5Y1YpOwoKCQlsb25nIGxvbmcgYW5zID0gMDsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCQlpZiAoY3ljW2ldKSBmaW5kRGlzdGFuY2UoRywgaSwgLTEsIDAsIHRydWUpOwoJCX0KCgkJYW5zID0gYWNjdW11bGF0ZShkaXMuYmVnaW4oKSwgZGlzLmVuZCgpLCAwbGwpOwoJCWNvdXQgPDwgIkNhc2UgIiA8PCBUIDw8ICI6ICIgPDwgYW5zIDw8ICJcbiI7Cgl9Cn0=