#include <bits/stdc++.h>
#define Mn(a, b) (dfn[a] < dfn[b] ? dfn[a] : dfn[b])
using namespace std;
const int N = 1e5 + 7, inf = 2e9;
int i, j, k, n, m, a, b, c, tot, sum, rt, mn, vrt, E;
int h[N], dfn[N], dep[N], st[N<<1][21], vis[N], sz[N], son[N], fa[N];
int cl[N];
struct Yoi {
int b, c, n;
} d[N<<1];
int dis(int x, int y) {
int l, r, k;
if((l=dfn[x]) > (r=dfn[y])) swap(l, r);
k = __lg(r-l+1);
return dep[x] + dep[y] - 2 * dep[Mn(st[l][k], st[r-(1<<k)+1][k])];
}
void dfx(int a, int s) {
st[dfn[a]=++tot][0] = a, dep[a] += s;
for(int i=h[a]; i; i=d[i].n) if(!dfn[d[i].b])
dfx(d[i].b, s+d[i].c), st[++tot][0] = a;
}
void dfs(int a, int fa) {
sz[a] = 1, son[a] = 0;
for(int i=h[a]; i; i=d[i].n) {
int b = d[i].b;
if(b == fa || vis[b]) continue;
dfs(b, a), sz[a] += sz[b];
son[a] = max(son[a], sz[b]);
}
son[a] = max(son[a], sum-sz[a]);
if(mn > son[a]) mn = son[a], rt = a;
}
int pre(int x, int cnt) {
sum = cnt, mn = inf, dfs(x, 0);
int a = rt; vis[a] = 1;
for(int i=h[a]; i; i=d[i].n) {
b = d[i].b;
if(vis[b]) continue;
fa[pre(b, cnt-son[b])] = a;
}
return a;
}
void init() {
dfx(1, 0);
for(j=1; j<=__lg(tot); j++) for(i=1; i+(1<<j)-1<=tot; i++)
st[i][j] = Mn(st[i][j-1], st[i+(1<<j-1)][j-1]);
vrt = pre(1, n);
}
multiset<int> s[N], res;
void add(int x) {
if(s[x].size() == 1) res.insert(*s[x].begin());
if(s[x].size() < 2) return;
auto a = s[x].begin(), b = a; ++a;
res.insert(*a+*b);
}
void del(int x) {
if(s[x].size() == 1) res.erase(*s[x].begin());
if(s[x].size() < 2) return;
auto a = s[x].begin(), b = a; ++a;
res.erase(res.lower_bound(*a+*b));
}
void ins(int x) {
for(int i=x; i; i=fa[i]) {
if(cl[i]) s[i].insert(-dis(x, i));
else del(i), s[i].insert(-dis(x, i)), add(i);
}
}
void era(int x) {
for(int i=x; i; i=fa[i]) {
if(cl[i]) s[i].erase(s[i].lower_bound(-dis(x, i)));
else del(i), s[i].erase(s[i].lower_bound(-dis(x, i))), add(i);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n;
for(i=1; i<n; i++) {
cin >> a >> b >> c;
d[++E] = {b, c, h[a]}, h[a] = E;
d[++E] = {a, c, h[b]}, h[b] = E;
}
init();
for(i=1; i<=n; i++) ins(i);
cin >> m;
while(m--) {
string c;
int x;
cin >> c;
if(c[0] == 'C') {
cin >> x;
if(cl[x]) ins(x);
else era(x);
cl[x] ^= 1;
} else {
if(!res.size()) cout << "They have disappeared.\n";
else cout << -*res.begin() << "\n";
}
}
return 0;
}