1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 using namespace std;
5 const int maxn=30023;
6 int ch[maxn][2],fa[maxn],sum[maxn],num[maxn],st[maxn];
7 int i,j,x,y,n,m;
8 bool rev[maxn];
9
10 int ra;char rx;
11 inline int read(){
12 rx=getchar(),ra=0;
13 while(rx<'0'||rx>'9')rx=getchar();
14 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;
15 }
16
17 inline bool isrt(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
18 inline void upd(int x){sum[x]=sum[ch[x][0]]+num[x]+sum[ch[x][1]];}
19 inline void pushdown(int x){
20 if(!rev[x])return;
21 rev[x]=0,swap(ch[x][0],ch[x][1]),rev[ch[x][0]]^=1,rev[ch[x][1]]^=1;
22 }
23 inline void rotate(int x){
24 int f=fa[x],gfa=fa[f],l=ch[f][1]==x,r=l^1;
25 if(!isrt(f))ch[gfa][ch[gfa][1]==f]=x;
26 ch[f][l]=ch[x][r],ch[x][r]=f,fa[x]=gfa,fa[f]=x,fa[ch[f][l]]=f;
27 sum[x]=sum[f],upd(f);
28 }
29 void splay(int x){
30 int f,gfa;
31 for(st[st[0]=1]=f=x;!isrt(f);)st[++st[0]]=(f=fa[f]);
32 while(st[0])pushdown(st[st[0]--]);
33 for(f=fa[x],gfa=fa[f];!isrt(x);rotate(x),f=fa[x],gfa=fa[f])
34 if(!isrt(f))rotate(((ch[f][0]==x)^(ch[gfa][0]==f))?x:f);
35 }
36 inline void access(int x){
37 for(int t=0;x;t=x,x=fa[x])splay(x),ch[x][1]=t,upd(x);
38 }
39 inline void makert(int x){
40 access(x),splay(x),rev[x]^=1;
41 }
42 void link(int x,int y){
43 makert(x),fa[x]=y;if(!(x&233))splay(x);
44 }
45 inline int getfa(int x){
46 for(access(x),splay(x);ch[x][0];x=ch[x][0]);
47 return x;
48 }
49 int main(){
50 n=read();for(i=1;i<=n;i++)num[i]=read();
51 m=read();char id;
52 while(m--){
53 for(id=getchar();id<'a'||id>'z';id=getchar());
54 x=read(),y=read();
55 if(id=='b')if(getfa(x)!=getfa(y))link(x,y),puts("yes");else puts("no");
56 if(id=='e')if(getfa(x)==getfa(y))makert(x),access(y),splay(y),printf("%d\n",sum[y]);else puts("impossible");
57 if(id=='p')makert(x),num[x]=y,upd(x);
58 }
59 return 0;
60 }