lct 水水水
#include <cstdio>
int ch[30010][2],fa[30010],lz[30010],x[30010],sum[30010];
int n,m;
int st[30010],tp;
int read_int () {
char c = getchar();
int re = 0;
for(;c > '9' || c < '0'; c = getchar());
for(;c >= '0' && c <= '9';c = getchar())
re = re * 10 + c - '0';
return re;
}
void reverse (int u) {
int t = ch[u][0];
ch[u][0] = ch[u][1];
ch[u][1] = t;
lz[u] ^= 1;
}
void pd (int u) {
if(!lz[u])
return;
lz[u] = 0;
reverse(ch[u][0]);
reverse(ch[u][1]);
}
void pu (int u) {
sum[u] = x[u] + sum[ch[u][0]] + sum[ch[u][1]];
}
void rot (int u,int d) {
ch[fa[u]][d ^ 1] = ch[u][d];
if(ch[u][d])
fa[ch[u][d]] = fa[u];
ch[u][d] = fa[u];
int t = fa[ch[u][d]];
fa[ch[u][d]] = u;
fa[u] = t;
pu(ch[u][d]);
pu(u);
if(!t)
return;
if(ch[t][0] == ch[u][d])
ch[t][0] = u;
if(ch[t][1] == ch[u][d])
ch[t][1] = u;
}
void splay (int u) {
int t = u;
st[tp = 1] = t;
while(ch[fa[t]][0] == t || ch[fa[t]][1] == t) {
t = fa[t];
st[++tp] = t;
}
while(tp) {
pd(st[tp]);
--tp;
}
while(ch[fa[u]][0] == u || ch[fa[u]][1] == u) {
if(ch[fa[fa[u]]][0] != fa[u] && ch[fa[fa[u]]][1] != fa[u]) {
if(ch[fa[u]][0] == u)
rot(u,1);
else rot(u,0);
}
else {
int d = ch[fa[fa[u]]][0] == fa[u];
if(ch[fa[u]][d] == u) {
rot(u,d ^ 1);
rot(u,d);
}
else {
rot(u,d);
rot(u,d);
}
}
}
}
void access (int u) {
int v = 0;
while(u) {
splay(u);
ch[u][1] = v;
pu(u);
v = u;
u = fa[u];
}
}
void mtr (int u) {
access(u);
splay(u);
reverse(u);
}
int fr (int u) {
access(u);
splay(u);
int t = u;
while(ch[t][0])
t = ch[t][0];
return t;
}
int main () {
n = read_int();
for(int i = 1;i <= n;++i)
x[i] = read_int();
m = read_int();
char C;
int u,v;
for(int i = 1;i <= m;++i) {
scanf(" %c",&C);
u = read_int();
v = read_int();
if(C == 'b') {
if(fr(u) == fr(v))
printf("no\n");
else {
printf("yes\n");
mtr(u);
mtr(v);
fa[u] = v;
}
}
else {
if(C == 'p') {
splay(u);
x[u] = v;
pu(u);
}
else {
if(fr(u) != fr(v))
printf("impossible\n");
else {
mtr(u);
access(v);
splay(v);
printf("%d\n",sum[v]);
}
}
}
}
}