1 #include<cstdio>
2 const int maxn=1e5+10;
3 inline int min_(int x,int y){return x<y?x:y;}
4 inline int max_(int x,int y){return x>y?x:y;}
5 int n,m,a,ans;
6 int h[maxn],hs,et[maxn],en[maxn];
7 int ts[maxn<<2],tv[maxn<<2],tf[maxn<<2];
8 int pd[maxn],pf[maxn],pt[maxn],pp[maxn],pps,pws[maxn],psz[maxn];
9 void dfs1(int k,int d){
10 pd[k]=d,psz[k]=1;
11 for(int i=h[k];i;i=en[i])
12 if(et[i]!=pf[k]){
13 dfs1(et[i],d+1);
14 psz[k]+=psz[et[i]];
15 if(psz[et[i]]>psz[pws[k]]) pws[k]=et[i];
16 }
17 }
18 void dfs2(int k,int t){
19 pp[k]=++pps,pt[k]=t;
20 if(pws[k]) dfs2(pws[k],t);
21 for(int i=h[k];i;i=en[i])
22 if(et[i]!=pf[k]&&et[i]!=pws[k])
23 dfs2(et[i],et[i]);
24 }
25 void build(int k,int l,int r){
26 if(l==r){tv[k]=1;return;}
27 int mid=l+r>>1,ls=k<<1,rs=ls|1;
28 build(ls,l,mid);
29 build(rs,mid+1,r);
30 tv[k]=tv[ls]+tv[rs];
31 }
32 void down(int k,int ls,int rs){
33 if(tf[k]==1) ts[ls]=tv[ls],ts[rs]=tv[rs],tf[ls]=tf[rs]=1;
34 if(tf[k]==-1) ts[ls]=ts[rs]=0,tf[ls]=tf[rs]=-1;
35 tf[k]=0;
36 }
37 int change(int k,int l,int r,int al,int ar,int v){
38 if(l==al&&r==ar){
39 int ret;
40 if(v==1) ret=tv[k]-ts[k],ts[k]=tv[k],tf[k]=1;
41 if(v==-1) ret=ts[k],ts[k]=0,tf[k]=-1;
42 return ret;
43 }
44 int mid=l+r>>1,ls=k<<1,rs=ls|1,ret=0;
45 if(tf[k]) down(k,ls,rs);
46 if(al<=mid) ret+=change(ls,l,mid,al,min_(ar,mid),v);
47 if(ar>mid) ret+=change(rs,mid+1,r,max_(al,mid+1),ar,v);
48 ts[k]=ts[ls]+ts[rs];
49 return ret;
50 }
51 int main(){
52 scanf("%d",&n);
53 for(int i=2;i<=n;i++){
54 scanf("%d",&a),a++;
55 pf[i]=a,++hs,et[hs]=i,en[hs]=h[a],h[a]=hs;
56 }
57 dfs1(1,1);
58 dfs2(1,1);
59 build(1,1,n);
60 scanf("%d",&m);
61 char ch[30];
62 while(m--){
63 scanf("%s%d",ch,&a),ans=0,a++;
64 if(ch[0]==‘i‘){
65 while(a!=0){
66 ans+=change(1,1,n,pp[pt[a]],pp[a],1);
67 a=pf[pt[a]];
68 }
69 printf("%d\n",ans);
70 }
71 if(ch[0]==‘u‘){
72 printf("%d\n",change(1,1,n,pp[a],pp[a]+psz[a]-1,-1));
73 }
74 }
75 return 0;
76 }