c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 5;
int n, q;
std::vector<int> g[N];
int dep[N], fa[N], top[N], sz[N], son[N], dfn[N], seg[N], timer;
int tree[N << 2], lazy[N << 2];
void dfs1(int u, int f) {
dep[u] = dep[f] + 1, son[u] = 0, sz[u] = 1, fa[u] = f;
for (int v : g[u]) {
if (v != f) {
dfs1(v, u);
sz[u] += sz[v];
if (sz[v] > sz[son[u]]) son[u] = v;
}
}
}
void dfs2(int u, int tp) {
top[u] = tp, dfn[u] = ++timer, seg[timer] = u;
if (son[u]) dfs2(son[u], tp);
for (int v : g[u]) {
if (v == fa[u] || v == son[u]) continue;
dfs2(v, v);
}
}
inline void pushup(int p) { tree[p] = tree[p << 1] + tree[p << 1 | 1]; }
inline void pushdown(int p, int l, int r) {
if (-1 == lazy[p]) return;
int mid = (l + r) >> 1;
int ls = p << 1, rs = p << 1 | 1;
tree[ls] = lazy[p] * (mid - l + 1);
lazy[ls] = lazy[p];
tree[rs] = lazy[p] * (r - mid);
lazy[rs] = lazy[p];
lazy[p] = -1;
}
int query(int p, int l, int r, int ql, int qr, int val,bool pre) {
int res = 0;
if (ql <= l && r <= qr) {
res = tree[p];
tree[p] = val * (r - l + 1);
lazy[p] = val;
return (pre?res:tree[p]-res);
}
pushdown(p, l, r);
int mid = (l + r) >> 1;
if (ql <= mid) res += query(p << 1, l, mid, ql, qr, val,pre);
if (qr > mid) res += query(p << 1 | 1, mid + 1, r, ql, qr, val,pre);
pushup(p);
return res;
}
int path_query(int u, int v) {
int res = 0;
while (top[u] != top[v]) {
if (dep[top[u]] < dep[top[v]]) std::swap(u, v);
res += query(1, 1, n, dfn[top[u]], dfn[u], 1,false);
u = fa[top[u]];
}
if (dep[u] < dep[v]) std::swap(u, v);
return res + query(1, 1, n, dfn[v], dfn[u], 1,false);
}
void fc() {
std::cin >> n;
memset(lazy, -1, sizeof(lazy));
for (int i = 2; i <= n; i++) {
int v;
std::cin >> v;
++v;
g[i].push_back(v);
g[v].push_back(i);
}
dfs1(1, 0);
dfs2(1, 1);
std::cin >> q;
while (q--) {
std::string s;
int x;
std::cin >> s >> x;
++x;
if (s[0] == 'i') {
std::cout << path_query(1, x) << "\n";
} else {
std::cout << query(1, 1, n, dfn[x], dfn[x] + sz[x] - 1, 0,true) << "\n";
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// std::cin>>t;
while (t--) fc();
return 0;
}