#include <bits/stdc++.h>
using namespace std;

const int MAXN = 100000 + 10, SIZE = 5000 + 10;

typedef pair<int, int> PII;
map<int, int> mem[SIZE];
map<int, int> *dp[MAXN];
vector<int> G[MAXN];
char st[MAXN * 10], *p;
int tot[SIZE], n, sz;

void build(int u) {
    G[u].clear();
    if (isdigit(*p) || *p == '-') {
        int ret = 0, sgn = 1;
        if (*p == '-') ++ p, sgn = -1;
        for (; isdigit(*p); ++ p) {
            ret = ret * 10 + (*p - '0');
        }
        G[u].push_back(ret * sgn);
        if (sgn == 1) tot[ret] ++;
        while (*p == ' ') ++ p;
        if (*p == ')') ++ p, ++ p;
    }
    else if (*p == '(') {
        ++ p; ++ p;
        G[u].push_back(n); build(n ++);
        G[u].push_back(n); build(n ++);
        while (*p == ' ') ++ p;
        if (*p == ')') ++ p, ++ p;
    }
}

int ret = 0;

void dfs(int u) {
    if (G[u].size() == 1) {
        dp[u] = &mem[sz ++]; dp[u]->clear();
        if (G[u][0] != -1 && tot[G[u][0]] > 1) {
            dp[u]->insert(PII(G[u][0], 1));
            ret = max(ret, 1);
        }
        return;
    }
    for (int i = 0; i < 2; ++ i) dfs(G[u][i]);
    int ls = G[u][0], rs = G[u][1];
    if (dp[ls]->size() < dp[rs]->size()) swap(ls, rs);
    map<int, int>::iterator it, now;
    for (it = dp[rs]->begin(); it != dp[rs]->end(); ++ it) {
        now = dp[ls]->find(it->first);
        if (now == dp[ls]->end()) dp[ls]->insert(*it);
        else {
            now->second += it->second;
            if (now->second == tot[now->first]) dp[ls]->erase(now);
        }
    }
    dp[u] = dp[ls];
    ret = max(ret, (int)dp[u]->size());
}

int main() {
    int cas = 0;
    while (gets(st) && strcmp(st, "( )") != 0) {
        memset(tot, 0, sizeof(tot));
        p = st; n = 1;
        build(0);
        ret = 0; sz = 0;
        dfs(0);
        printf("Tree %d: %d\n", ++ cas, ret);
    }
    return 0;
}
