#include <bits/stdc++.h>
using namespace std;
vector<long long> dis;
vector<bool> cyc;
int cycV, cycU;
void findDistance(vector<vector<int>> &G, int v, int p, long long d, bool findAnswer = false) {
dis[v] = d;
for (int u : G[v]) {
if (u == p || (findAnswer && cyc[u])) continue;
findDistance(G, u, v, d + 1);
}
}
bool captureCycleVert(vector<vector<int>> &G, int v, int p = -1) {
if (v == cycU) return cyc[v] = true;
for (int 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+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8bG9uZyBsb25nPiBkaXM7CnZlY3Rvcjxib29sPiBjeWM7CgppbnQgY3ljViwgY3ljVTsKCnZvaWQgZmluZERpc3RhbmNlKHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJkcsIGludCB2LCBpbnQgcCwgbG9uZyBsb25nIGQsIGJvb2wgZmluZEFuc3dlciA9IGZhbHNlKSB7CglkaXNbdl0gPSBkOwoJZm9yIChpbnQgdSA6IEdbdl0pIHsKCQlpZiAodSA9PSBwIHx8IChmaW5kQW5zd2VyICYmIGN5Y1t1XSkpIGNvbnRpbnVlOwoJCWZpbmREaXN0YW5jZShHLCB1LCB2LCBkICsgMSk7Cgl9Cn0KCmJvb2wgY2FwdHVyZUN5Y2xlVmVydCh2ZWN0b3I8dmVjdG9yPGludD4+ICZHLCBpbnQgdiwgaW50IHAgPSAtMSkgewoJaWYgKHYgPT0gY3ljVSkgcmV0dXJuIGN5Y1t2XSA9IHRydWU7Cglmb3IgKGludCB1IDogR1t2XSkgewoJCWlmICh1ID09IHApIGNvbnRpbnVlOwoJCWlmIChjYXB0dXJlQ3ljbGVWZXJ0KEcsIHUsIHYpKSB7CgkJCXJldHVybiBjeWNbdl0gPSB0cnVlOwoJCX0KCX0KCXJldHVybiBjeWNbdl07Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShudWxscHRyKTsKCglpbnQgdDsKCWNpbiA+PiB0OwoJZm9yIChpbnQgVCA9IDE7IFQgPD0gdDsgVCsrKSB7CgkJaW50IG47IGNpbiA+PiBuOwoKCQl2ZWN0b3I8dmVjdG9yPGludD4+IEcobik7CgkJZGlzLmFzc2lnbihuLCAwKTsKCgkJZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKCQkJaW50IHUsIHY7CgkJCWNpbiA+PiB1ID4+IHY7CgkJCXUtLSwgdi0tOwoJCQlHW3VdLnB1c2hfYmFjayh2KTsKCQkJR1t2XS5wdXNoX2JhY2sodSk7CgkJfQoKCQlmaW5kRGlzdGFuY2UoRywgMCwgLTEsIDApOyAgICAgICAgIAoJCWN5Y1YgPSBtYXhfZWxlbWVudChkaXMuYmVnaW4oKSwgZGlzLmVuZCgpKSAtIGRpcy5iZWdpbigpOwoJCWZpbmREaXN0YW5jZShHLCBjeWNWLCAtMSwgMCk7CgkJY3ljVSA9IG1heF9lbGVtZW50KGRpcy5iZWdpbigpLCBkaXMuZW5kKCkpIC0gZGlzLmJlZ2luKCk7CgoJCWN5Yy5hc3NpZ24obiwgZmFsc2UpOwoJCWNhcHR1cmVDeWNsZVZlcnQoRywgY3ljVik7CgoJCWxvbmcgbG9uZyBhbnMgPSAwOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJCWlmIChjeWNbaV0pIGZpbmREaXN0YW5jZShHLCBpLCAtMSwgMCwgdHJ1ZSk7CgkJfQoKCQlhbnMgPSBhY2N1bXVsYXRlKGRpcy5iZWdpbigpLCBkaXMuZW5kKCksIDBsbCk7CgkJY291dCA8PCAiQ2FzZSAiIDw8IFQgPDwgIjogIiA8PCBhbnMgPDwgIlxuIjsKCX0KfQ==