#include <cstdio>
#include <vector>
#include <queue>
#include <time.h>
#include <algorithm>
using namespace std;
#define MN 30005
#define MQ 300005
int n, m, L, N;
int bt[4 * MN];
int w[MN], c[MN], chk[MN], d[MN], bn, par[MN], head[MN], number[MN], line[MN], depth[MN];
char S[22];
struct Query {
int T, A, B;
} q[MQ];
int u(int x) {
if (c[x] == x) return x;
c[x] = u(c[x]);
return c[x];
}
vector <int> v[MN];
void dfs(int x, int dad) {
int split = 0;
number[x] = ++N;
head[N] = number[dad];
line[N] = L;
chk[x] = 1;
for (int i = 0; i < v[x].size(); i++) {
if (chk[v[x][i]] == 0) {
depth[N + 1] = depth[number[x]] + 1;
par[N + 1] = number[x];
if (!split) {
dfs(v[x][i], dad);
split = 1;
}
else {
++L;
dfs(v[x][i], v[x][i]);
}
}
}
}
void upd(int x, int y) {
while (x) bt[x] += y, x /= 2;
}
int sum(int lo, int hi) {
int ret = 0;
while (lo <= hi) {
if (lo == hi) { ret += bt[lo]; break; }
if (lo & 1) ret += bt[lo++];
if (!(hi & 1)) ret += bt[hi--];
lo /= 2; hi /= 2;
}
return ret;
}
int main() {
scanf("%d", &n);
bn = 1; while (bn < n) bn *= 2; bn--;
for (int i = 1; i <= n; i++) {
scanf("%d", &w[i]);
c[i] = i;
par[i] = -1;
}
scanf("%d", &m);
for (int i = 1; i <= m; i++) {
scanf("%s%d%d", S, &q[i].A, &q[i].B);
if (S[0] == 'p') q[i].T = 0;
else if (S[0] == 'b') q[i].T = 1;
else q[i].T = 2;
}
for (int i = 1; i <= m; i++) {
if (q[i].T == 1) {
int A = u(q[i].A), B = u(q[i].B);
if (A != B) {
c[B] = A;
v[q[i].A].push_back(q[i].B);
v[q[i].B].push_back(q[i].A);
}
}
}
L = 1;
for (int i = 1; i <= n; i++) {
if (!number[i]) {
depth[N + 1] = 1;
dfs(i, i);
}
}
for (int i = 1; i <= n; i++) {
upd(bn + number[i], w[i]);
c[i] = i;
}
for (int i = 1; i <= m; i++) {
if (q[i].T == 0) {
upd(bn + number[q[i].A], q[i].B - bt[bn + number[q[i].A]]);
}
else if (q[i].T == 1) {
int A = u(number[q[i].A]), B = u(number[q[i].B]);
if (A == B) puts("no");
else {
c[B] = A;
puts("yes");
}
}
else {
int A = u(number[q[i].A]), B = u(number[q[i].B]);
if (A != B) puts("impossible");
else {
int x = number[q[i].A], y = number[q[i].B];
int res = 0;
while (line[x] != line[y]) {
if (depth[head[x]] < depth[head[y]]) swap(x, y);
res += sum(bn + head[x], bn + x);
x = par[head[x]];
}
if (x > y) swap(x, y);
res += sum(bn + x, bn + y);
printf("%d\n", res);
}
}
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIE1OIDMwMDA1CiNkZWZpbmUgTVEgMzAwMDA1CmludCBuLCBtLCBMLCBOOwppbnQgYnRbNCAqIE1OXTsKaW50IHdbTU5dLCBjW01OXSwgY2hrW01OXSwgZFtNTl0sIGJuLCBwYXJbTU5dLCBoZWFkW01OXSwgbnVtYmVyW01OXSwgbGluZVtNTl0sIGRlcHRoW01OXTsKY2hhciBTWzIyXTsKc3RydWN0IFF1ZXJ5IHsKCWludCBULCBBLCBCOwp9IHFbTVFdOwppbnQgdShpbnQgeCkgewoJaWYgKGNbeF0gPT0geCkgcmV0dXJuIHg7CgljW3hdID0gdShjW3hdKTsKCXJldHVybiBjW3hdOwp9CnZlY3RvciA8aW50PiB2W01OXTsKdm9pZCBkZnMoaW50IHgsIGludCBkYWQpIHsKCWludCBzcGxpdCA9IDA7CgludW1iZXJbeF0gPSArK047CgloZWFkW05dID0gbnVtYmVyW2RhZF07CglsaW5lW05dID0gTDsKCWNoa1t4XSA9IDE7Cglmb3IgKGludCBpID0gMDsgaSA8IHZbeF0uc2l6ZSgpOyBpKyspIHsKCQlpZiAoY2hrW3ZbeF1baV1dID09IDApIHsKCQkJZGVwdGhbTiArIDFdID0gZGVwdGhbbnVtYmVyW3hdXSArIDE7CgkJCXBhcltOICsgMV0gPSBudW1iZXJbeF07CgkJCWlmICghc3BsaXQpIHsKCQkJCWRmcyh2W3hdW2ldLCBkYWQpOwoJCQkJc3BsaXQgPSAxOwoJCQl9CgkJCWVsc2UgewoJCQkJKytMOwoJCQkJZGZzKHZbeF1baV0sIHZbeF1baV0pOwoJCQl9CgkJfQoJfQp9CnZvaWQgdXBkKGludCB4LCBpbnQgeSkgewoJd2hpbGUgKHgpIGJ0W3hdICs9IHksIHggLz0gMjsKfQppbnQgc3VtKGludCBsbywgaW50IGhpKSB7CglpbnQgcmV0ID0gMDsKCXdoaWxlIChsbyA8PSBoaSkgewoJCWlmIChsbyA9PSBoaSkgeyByZXQgKz0gYnRbbG9dOyBicmVhazsgfQoJCWlmIChsbyAmIDEpIHJldCArPSBidFtsbysrXTsKCQlpZiAoIShoaSAmIDEpKSByZXQgKz0gYnRbaGktLV07CgkJbG8gLz0gMjsgaGkgLz0gMjsKCX0KCXJldHVybiByZXQ7Cn0KaW50IG1haW4oKSB7CglzY2FuZigiJWQiLCAmbik7CglibiA9IDE7IHdoaWxlIChibiA8IG4pIGJuICo9IDI7IGJuLS07Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlzY2FuZigiJWQiLCAmd1tpXSk7CgkJY1tpXSA9IGk7CgkJcGFyW2ldID0gLTE7Cgl9CglzY2FuZigiJWQiLCAmbSk7Cglmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKCQlzY2FuZigiJXMlZCVkIiwgUywgJnFbaV0uQSwgJnFbaV0uQik7CgkJaWYgKFNbMF0gPT0gJ3AnKSBxW2ldLlQgPSAwOwoJCWVsc2UgaWYgKFNbMF0gPT0gJ2InKSBxW2ldLlQgPSAxOwoJCWVsc2UgcVtpXS5UID0gMjsKCX0KCWZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewoJCWlmIChxW2ldLlQgPT0gMSkgewoJCQlpbnQgQSA9IHUocVtpXS5BKSwgQiA9IHUocVtpXS5CKTsKCQkJaWYgKEEgIT0gQikgewoJCQkJY1tCXSA9IEE7CgkJCQl2W3FbaV0uQV0ucHVzaF9iYWNrKHFbaV0uQik7CgkJCQl2W3FbaV0uQl0ucHVzaF9iYWNrKHFbaV0uQSk7CgkJCX0KCQl9Cgl9CglMID0gMTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWlmICghbnVtYmVyW2ldKSB7CgkJCWRlcHRoW04gKyAxXSA9IDE7CgkJCWRmcyhpLCBpKTsKCQl9Cgl9Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQl1cGQoYm4gKyBudW1iZXJbaV0sIHdbaV0pOwoJCWNbaV0gPSBpOwoJfQoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJaWYgKHFbaV0uVCA9PSAwKSB7CgkJCXVwZChibiArIG51bWJlcltxW2ldLkFdLCBxW2ldLkIgLSBidFtibiArIG51bWJlcltxW2ldLkFdXSk7CgkJfQoJCWVsc2UgaWYgKHFbaV0uVCA9PSAxKSB7CgkJCWludCBBID0gdShudW1iZXJbcVtpXS5BXSksIEIgPSB1KG51bWJlcltxW2ldLkJdKTsKCQkJaWYgKEEgPT0gQikgcHV0cygibm8iKTsKCQkJZWxzZSB7CgkJCQljW0JdID0gQTsKCQkJCXB1dHMoInllcyIpOwoJCQl9CgkJfQoJCWVsc2UgewoJCQlpbnQgQSA9IHUobnVtYmVyW3FbaV0uQV0pLCBCID0gdShudW1iZXJbcVtpXS5CXSk7CgkJCWlmIChBICE9IEIpIHB1dHMoImltcG9zc2libGUiKTsKCQkJZWxzZSB7CgkJCQlpbnQgeCA9IG51bWJlcltxW2ldLkFdLCB5ID0gbnVtYmVyW3FbaV0uQl07CgkJCQlpbnQgcmVzID0gMDsKCQkJCXdoaWxlIChsaW5lW3hdICE9IGxpbmVbeV0pIHsKCQkJCQlpZiAoZGVwdGhbaGVhZFt4XV0gPCBkZXB0aFtoZWFkW3ldXSkgc3dhcCh4LCB5KTsKCQkJCQlyZXMgKz0gc3VtKGJuICsgaGVhZFt4XSwgYm4gKyB4KTsKCQkJCQl4ID0gcGFyW2hlYWRbeF1dOwoJCQkJfQoJCQkJaWYgKHggPiB5KSBzd2FwKHgsIHkpOwoJCQkJcmVzICs9IHN1bShibiArIHgsIGJuICsgeSk7CgkJCQlwcmludGYoIiVkXG4iLCByZXMpOwoJCQl9CgkJfQoJfQp9