#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=5e5+4;
struct bian{
int bef,to;
}edge[2*maxn+1];
int size[maxn+1];
int n,num,m,tp[maxn+1],idnum,head[maxn+1],deep[maxn+1],zson[maxn+1],father[maxn+1],id[maxn+1];
void dfs1(int x,int fa,int d){
deep[x]=d;
size[x]=1;
int zon=-1;
father[x]=fa;
for(int i=head[x];i!=0;i=edge[i].bef){
int qwq=edge[i].to;
if(qwq==fa)continue;
dfs1(qwq,x,d+1);
size[x]+=size[qwq];
if(size[qwq]>zon){
zson[x]=qwq;
zon=size[qwq];
}
}
}
void dfs2(int x,int topp){
id[x]=++idnum;
tp[x]=topp;
if(zson[x]){
dfs2(zson[x],topp);
for(int i=head[x];i!=0;i=edge[i].bef){
int u=edge[i].to;
if(!id[u])
dfs2(u,u);
}
}
}
void addedge(int u,int v){
edge[++num].to=v;
edge[num].bef=head[u];
head[u]=num;
}
struct tre{
int l,r,w,siz,tag;
}shu[4*maxn+1];
void build(int k,int l,int r){
shu[k].l=l;
shu[k].r=r;
shu[k].siz=r-l+1;
shu[k].tag=-1;
shu[k].w=0;
if(l==r){
return;
}
int mid=(l+r)/2;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
// cout<<k<<' '<<l<<' '<<r<<endl;
}
void push(int k){
if(shu[k].tag==-1)return;
shu[k*2].w=(shu[k*2].siz)*shu[k].tag;
shu[k*2+1].w=(shu[k*2+1].siz)*shu[k].tag;
shu[k*2].tag=shu[k].tag;
shu[k*2+1].tag=shu[k].tag;
shu[k].tag=-1;
}
void gai(int k,int l,int r,int qwq){
if(l<=shu[k].l&&r>=shu[k].r){
shu[k].w=shu[k].siz*qwq;
shu[k].tag=qwq;
// cout<<"i gaile"<<k<<' '<<l<<' '<<r<<endl;
return;
}
push(k);
int mid=(shu[k].l+shu[k].r)/2;
if(l<=mid)gai(k*2,l,r,qwq);
if(r>mid)gai(k*2+1,l,r,qwq);
shu[k].w=shu[k*2].w+shu[k*2+1].w;
}
void t0(int a,int b){
while(tp[a]!=tp[b]){
if(deep[tp[a]]<deep[tp[b]])swap(a,b);
gai(1,id[tp[a]],id[a],1);
a=father[tp[a]];
}
if(deep[a]>deep[b])swap(b,a);
gai(1,id[a],id[b],1);
}
#undef int
int main(){
#define int long long
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
#endif
scanf("%lld",&n);
for(int i=2;i<=n;i++){
int y;
scanf("%lld",&y);
y++;
addedge(i,y);
addedge(y,i);
// cout<<i<<' '<<y<<endl;
}
dfs1(1,0,1);
dfs2(1,1);
build(1,1,n);
scanf("%lld",&m);
const string un="uninstall";
const string in="install";
// for(int i=1;i<=n;i++){
// cout<<id[i]<<' ';
// }
// cout<<endl;
for(int i=1;i<=m;i++){
int a;
string s;
char op[11];
scanf("%s%lld",op,&a);
s=op;
a++;
if(s==in){
int qaq=shu[1].w;
t0(1,id[a]);
printf("%lld\n",shu[1].w-qaq);
// cout<<qaq<<endl;
// cout<<shu[1].w<<endl;
}
else if(s==un){
int qaq=shu[1].w;
gai(1,id[a],id[a]+size[a]-1,0);
printf("%lld\n",qaq-shu[1].w);
// cout<<qaq<<endl;
// cout<<shu[1].w<<endl;
}
}
return 0;
}