#include <stdio.h>
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <stdlib.h>
#include <math.h>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
#include <assert.h>
using namespace std;
#define fi first
#define sc second
#define ff first.first
#define fs first.second
#define sf second.first
#define ss second.second
#define pb push_back
#define mp make_pair
#define ll long long
#define dl double
#define ison(a,b) (a&(1<<b))
#define bitcnt __builtin_popcount
#define MOD 1000000007
typedef pair<int,int> ii;
typedef pair<int,ii> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> wadj;
const int N=5e4+5;
int parent[N],sub_size[N],depth[N];
int chead[N];
int cno,ptr,pib[N],bsa[N],a[N],n,q,lazy[4*N];
vi adj[N];
struct node{
int start;
int finish;
int gcd1;
};
node segtree[4*N];
void scanint(int &x)
{
register int c = getchar_unlocked();
x = 0;
for(;(c<48 || c>57);c = getchar_unlocked());
for(;c>47 && c<58;c = getchar_unlocked()) {x = (x<<1) + (x<<3) + c - 48;}
}
char scanc(){
char c = getchar_unlocked();
while(c < 'C' || c > 'F'){
c = getchar_unlocked();
}
return c;
}
int gcd(int a,int b)
{
a=abs(a);b=abs(b);
if(b>a)
swap(a,b);
if(b==0)
return a;
else
return gcd(b,a%b);
}
inline void combine(node &l , node &r,node &temp){
temp.start = l.start;
temp.finish = r.finish;
temp.gcd1 = gcd(gcd(r.start - l.finish , r.gcd1 ) , l.gcd1);
}
void build(int l , int r , int node){
lazy[node] = 0;
if(l == r){
segtree[node].start = bsa[l];
segtree[node].finish = bsa[r];
segtree[node].gcd1 = 0;
}
else{
int mid = (l + r) >> 1;
int lc = node + node;
int rc = lc | 1;
build(l , mid , lc);
build(mid + 1 , r , rc);
combine(segtree[lc] , segtree[rc] , segtree[node]);
}
}
void push(int l , int r , int node){
if(lazy[node]){
segtree[node].start += lazy[node];
segtree[node].finish += lazy[node];
if(l ^ r){
int lc = node + node;
int rc = lc | 1;
lazy[lc] += lazy[node];
lazy[rc] += lazy[node];
}
lazy[node] = 0;
}
}
void update1(int l , int r , int node , int ql ,int qr , int val){
push(l,r,node);
if(l > qr || r < ql){
return;
}
if(l >= ql && r <= qr){
lazy[node] += val;
push(l,r,node);
return;
}
int mid = (l + r) >> 1;
int lc = node + node;
int rc = lc | 1;
update1(l,mid,lc,ql,qr,val);
update1(mid+1,r,rc,ql,qr,val);
combine(segtree[lc] , segtree[rc] , segtree[node]);
}
int query1(int l , int r , int node, int ql , int qr){
push(l,r,node);
if(l > qr || r < ql){
return 0;
}
if(l >= ql && r <= qr){
return gcd(segtree[node].start , segtree[node].gcd1);
}
int mid = (l + r) >> 1;
int lc = node + node;
int rc = lc | 1;
return gcd(query1(l,mid,lc,ql,qr),query1(mid+1,r,rc,ql,qr));
}
inline void update(int l , int r , int val){
update1(1,n,1,l,r,val);
}
inline int query(int l , int r){
return query1(1,n,1,l,r);
}
void dfs(int u1,int p)
{
parent[u1]=p;
sub_size[u1]=1;
for(int i=0;i<adj[u1].size();i++)
{
ll v=adj[u1][i];
if(v!=p)
{
depth[v]=depth[u1]+1;
dfs(v,u1);
sub_size[u1]+=sub_size[v];
}
}
}
void hld(ll u,ll p)
{
//printf("(hh)\n" );
pib[u]=++ptr;
bsa[ptr]=a[u];
ll sc=-1,nc;
for(ll i=0;i<adj[u].size();i++)
if(adj[u][i]!=p)
if(sc==-1||sub_size[sc]<sub_size[adj[u][i]])
sc=adj[u][i];
if(sc!=-1)
{
chead[sc]=chead[u];
hld(sc,u);
}
for(int i=0;i<adj[u].size();i++)
if(adj[u][i]!=sc&&adj[u][i]!=p)
{
chead[adj[u][i]]=adj[u][i];
hld(adj[u][i],u);
}
}
void upd(ll u,ll v,ll val)
{
while(chead[u]!=chead[v])
{
if(depth[chead[u]]<depth[chead[v]])
swap(u,v);
update(pib[chead[u]],pib[u],val);
u=parent[chead[u]];
}
if(depth[u]>depth[v])
swap(u,v);
update(pib[u],pib[v],val);
}
int solve(int u,int v)
{
int ans=0;
while(chead[u]!=chead[v])
{
if(depth[chead[u]]<depth[chead[v]])
swap(u,v);
ans=gcd(ans,query(pib[chead[u]],pib[u]));
u=parent[chead[u]];
}
if(depth[u]>depth[v])
swap(u,v);
ans=gcd(ans,query(pib[u],pib[v]));
return ans;
}
void pre()
{
dfs(1,0);
chead[1]=1;
hld(1,0);
build(1,n,1);
}
int main(){
//freopen("inp.txt","r",stdin);
scanint(n);
for(int i = 1 ; i < n ; ++i){
int a,b;
scanint(a);scanint(b);
adj[a+1].pb(b+1);
adj[b+1].pb(a+1);
}
for(int i = 1 ; i <= n ; ++i)
scanint(a[i]);
pre();
int q;
scanint(q);
while(q--){
char type = scanc();
int l,r,val;
scanint(l);scanint(r);
l++,r++;
if(type=='F'){
printf("%d\n",solve(l,r));
}
else{
scanint(val);
upd(l,r,val);
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxhc3NlcnQuaD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBmZiBmaXJzdC5maXJzdAojZGVmaW5lIGZzIGZpcnN0LnNlY29uZAojZGVmaW5lIHNmIHNlY29uZC5maXJzdAojZGVmaW5lIHNzIHNlY29uZC5zZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBkbCBkb3VibGUKI2RlZmluZSBpc29uKGEsYikgKGEmKDE8PGIpKQojZGVmaW5lIGJpdGNudCBfX2J1aWx0aW5fcG9wY291bnQKI2RlZmluZSBNT0QgMTAwMDAwMDAwNyAKIAp0eXBlZGVmIHBhaXI8aW50LGludD4gaWk7CnR5cGVkZWYgcGFpcjxpbnQsaWk+IGlpaTsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8aWk+IHZpaTsKdHlwZWRlZiB2ZWN0b3I8aWlpPiB3YWRqOwogCmNvbnN0IGludCBOPTVlNCs1OwppbnQgcGFyZW50W05dLHN1Yl9zaXplW05dLGRlcHRoW05dOwppbnQgY2hlYWRbTl07CmludCBjbm8scHRyLHBpYltOXSxic2FbTl0sYVtOXSxuLHEsbGF6eVs0Kk5dOwp2aSBhZGpbTl07CgpzdHJ1Y3Qgbm9kZXsKICAgIGludCBzdGFydDsKICAgIGludCBmaW5pc2g7CiAgICBpbnQgZ2NkMTsKfTsKbm9kZSBzZWd0cmVlWzQqTl07CiAKdm9pZCBzY2FuaW50KGludCAmeCkKewogICAgcmVnaXN0ZXIgaW50IGMgPSBnZXRjaGFyX3VubG9ja2VkKCk7CiAgICB4ID0gMDsKICAgIGZvcig7KGM8NDggfHwgYz41Nyk7YyA9IGdldGNoYXJfdW5sb2NrZWQoKSk7CiAgICBmb3IoO2M+NDcgJiYgYzw1ODtjID0gZ2V0Y2hhcl91bmxvY2tlZCgpKSB7eCA9ICh4PDwxKSArICh4PDwzKSArIGMgLSA0ODt9Cn0KIApjaGFyIHNjYW5jKCl7CiAgICBjaGFyIGMgPSBnZXRjaGFyX3VubG9ja2VkKCk7CiAgICB3aGlsZShjIDwgJ0MnIHx8IGMgPiAnRicpewogICAgICAgIGMgPSBnZXRjaGFyX3VubG9ja2VkKCk7CiAgICB9CiAgICByZXR1cm4gYzsKfQogCmludCBnY2QoaW50IGEsaW50IGIpCnsKICBhPWFicyhhKTtiPWFicyhiKTsKICBpZihiPmEpCiAgc3dhcChhLGIpOwogIGlmKGI9PTApCiAgcmV0dXJuIGE7CiAgZWxzZQogIHJldHVybiBnY2QoYixhJWIpOwp9CgppbmxpbmUgdm9pZCBjb21iaW5lKG5vZGUgJmwgLCBub2RlICZyLG5vZGUgJnRlbXApewogICAgdGVtcC5zdGFydCA9IGwuc3RhcnQ7CiAgICB0ZW1wLmZpbmlzaCA9IHIuZmluaXNoOwogICAgdGVtcC5nY2QxID0gZ2NkKGdjZChyLnN0YXJ0IC0gbC5maW5pc2ggLCByLmdjZDEgKSAsIGwuZ2NkMSk7Cn0KCiAgICAKICAgIHZvaWQgYnVpbGQoaW50IGwgLCBpbnQgciAsIGludCBub2RlKXsKICAgICAgICBsYXp5W25vZGVdID0gMDsKICAgICAgICBpZihsID09IHIpewogICAgICAgICAgICBzZWd0cmVlW25vZGVdLnN0YXJ0ID0gYnNhW2xdOwogICAgICAgICAgICBzZWd0cmVlW25vZGVdLmZpbmlzaCA9IGJzYVtyXTsKICAgICAgICAgICAgc2VndHJlZVtub2RlXS5nY2QxID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICAgICAgaW50IGxjID0gbm9kZSArIG5vZGU7CiAgICAgICAgICAgIGludCByYyA9IGxjIHwgMTsKICAgICAgICAgICAgYnVpbGQobCAsIG1pZCAsIGxjKTsKICAgICAgICAgICAgYnVpbGQobWlkICsgMSAsIHIgLCByYyk7CiAgICAgICAgICAgIGNvbWJpbmUoc2VndHJlZVtsY10gLCBzZWd0cmVlW3JjXSAsIHNlZ3RyZWVbbm9kZV0pOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgcHVzaChpbnQgbCAsIGludCByICwgaW50IG5vZGUpewogICAgICAgIGlmKGxhenlbbm9kZV0pewogICAgICAgICAgICBzZWd0cmVlW25vZGVdLnN0YXJ0ICs9IGxhenlbbm9kZV07CiAgICAgICAgICAgIHNlZ3RyZWVbbm9kZV0uZmluaXNoICs9IGxhenlbbm9kZV07CiAgICAgICAgICAgIGlmKGwgXiByKXsKICAgICAgICAgICAgICAgIGludCBsYyA9IG5vZGUgKyBub2RlOwogICAgICAgICAgICAgICAgaW50IHJjID0gbGMgfCAxOwogICAgICAgICAgICAgICAgbGF6eVtsY10gKz0gbGF6eVtub2RlXTsKICAgICAgICAgICAgICAgIGxhenlbcmNdICs9IGxhenlbbm9kZV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGF6eVtub2RlXSA9IDA7CiAgICAgICAgfQogICAgfQogICAgdm9pZCB1cGRhdGUxKGludCBsICwgaW50IHIgLCBpbnQgbm9kZSAsIGludCBxbCAsaW50IHFyICwgaW50IHZhbCl7CiAgICAgICAgcHVzaChsLHIsbm9kZSk7CiAgICAgICAgaWYobCA+IHFyIHx8IHIgPCBxbCl7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYobCA+PSBxbCAmJiByIDw9IHFyKXsKICAgICAgICAgICAgbGF6eVtub2RlXSArPSB2YWw7CiAgICAgICAgICAgIHB1c2gobCxyLG5vZGUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgaW50IGxjID0gbm9kZSArIG5vZGU7CiAgICAgICAgaW50IHJjID0gbGMgfCAxOwogICAgICAgIHVwZGF0ZTEobCxtaWQsbGMscWwscXIsdmFsKTsKICAgICAgICB1cGRhdGUxKG1pZCsxLHIscmMscWwscXIsdmFsKTsKICAgICAgICBjb21iaW5lKHNlZ3RyZWVbbGNdICwgc2VndHJlZVtyY10gLCBzZWd0cmVlW25vZGVdKTsKICAgIH0KICAgIGludCBxdWVyeTEoaW50IGwgLCBpbnQgciAsIGludCBub2RlLCBpbnQgcWwgLCBpbnQgcXIpewogICAgICAgIHB1c2gobCxyLG5vZGUpOwogICAgICAgIGlmKGwgPiBxciB8fCByIDwgcWwpewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgaWYobCA+PSBxbCAmJiByIDw9IHFyKXsKICAgICAgICAgICAgcmV0dXJuIGdjZChzZWd0cmVlW25vZGVdLnN0YXJ0ICwgc2VndHJlZVtub2RlXS5nY2QxKTsKICAgICAgICB9CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBpbnQgbGMgPSBub2RlICsgbm9kZTsKICAgICAgICBpbnQgcmMgPSBsYyB8IDE7CiAgICAgICAgcmV0dXJuIGdjZChxdWVyeTEobCxtaWQsbGMscWwscXIpLHF1ZXJ5MShtaWQrMSxyLHJjLHFsLHFyKSk7CiAgICB9CiAgICBpbmxpbmUgdm9pZCB1cGRhdGUoaW50IGwgLCBpbnQgciAsIGludCB2YWwpewogICAgICAgIHVwZGF0ZTEoMSxuLDEsbCxyLHZhbCk7CiAgICB9CiAgICBpbmxpbmUgaW50IHF1ZXJ5KGludCBsICwgaW50IHIpewogICAgICAgIHJldHVybiBxdWVyeTEoMSxuLDEsbCxyKTsKICAgIH0KCnZvaWQgZGZzKGludCB1MSxpbnQgcCkKewogIHBhcmVudFt1MV09cDsKICBzdWJfc2l6ZVt1MV09MTsKICBmb3IoaW50IGk9MDtpPGFkalt1MV0uc2l6ZSgpO2krKykKICB7CiAgICBsbCB2PWFkalt1MV1baV07CiAgICBpZih2IT1wKQogICAgewogICAgICBkZXB0aFt2XT1kZXB0aFt1MV0rMTsKICAgICAgZGZzKHYsdTEpOwogICAgICBzdWJfc2l6ZVt1MV0rPXN1Yl9zaXplW3ZdOwogICAgfQogIH0KfQp2b2lkIGhsZChsbCB1LGxsIHApCnsKICAvL3ByaW50ZigiKGhoKVxuIiApOwogIHBpYlt1XT0rK3B0cjsKICBic2FbcHRyXT1hW3VdOwogIGxsIHNjPS0xLG5jOwogIGZvcihsbCBpPTA7aTxhZGpbdV0uc2l6ZSgpO2krKykKICBpZihhZGpbdV1baV0hPXApCiAgICBpZihzYz09LTF8fHN1Yl9zaXplW3NjXTxzdWJfc2l6ZVthZGpbdV1baV1dKQogICAgICBzYz1hZGpbdV1baV07CiAgaWYoc2MhPS0xKQogIHsKICAgIGNoZWFkW3NjXT1jaGVhZFt1XTsKICAgIGhsZChzYyx1KTsKICB9CiAgZm9yKGludCBpPTA7aTxhZGpbdV0uc2l6ZSgpO2krKykKICBpZihhZGpbdV1baV0hPXNjJiZhZGpbdV1baV0hPXApCiAgewogICAgY2hlYWRbYWRqW3VdW2ldXT1hZGpbdV1baV07CiAgICBobGQoYWRqW3VdW2ldLHUpOwogIH0KfQp2b2lkIHVwZChsbCB1LGxsIHYsbGwgdmFsKQp7CiAgd2hpbGUoY2hlYWRbdV0hPWNoZWFkW3ZdKQogIHsKICAgIGlmKGRlcHRoW2NoZWFkW3VdXTxkZXB0aFtjaGVhZFt2XV0pCiAgICAgIHN3YXAodSx2KTsKICAgIHVwZGF0ZShwaWJbY2hlYWRbdV1dLHBpYlt1XSx2YWwpOwogICAgdT1wYXJlbnRbY2hlYWRbdV1dOwogIH0KICBpZihkZXB0aFt1XT5kZXB0aFt2XSkKICAgIHN3YXAodSx2KTsKICB1cGRhdGUocGliW3VdLHBpYlt2XSx2YWwpOwp9CgppbnQgc29sdmUoaW50IHUsaW50IHYpCnsKICBpbnQgYW5zPTA7CiAgd2hpbGUoY2hlYWRbdV0hPWNoZWFkW3ZdKQogIHsKICAgIAogICAgaWYoZGVwdGhbY2hlYWRbdV1dPGRlcHRoW2NoZWFkW3ZdXSkKICAgICAgc3dhcCh1LHYpOwogICAgYW5zPWdjZChhbnMscXVlcnkocGliW2NoZWFkW3VdXSxwaWJbdV0pKTsKICAgIHU9cGFyZW50W2NoZWFkW3VdXTsKICB9CiAgaWYoZGVwdGhbdV0+ZGVwdGhbdl0pCiAgICBzd2FwKHUsdik7CiAgYW5zPWdjZChhbnMscXVlcnkocGliW3VdLHBpYlt2XSkpOwogIHJldHVybiBhbnM7Cn0KCnZvaWQgcHJlKCkKewogIGRmcygxLDApOwogIGNoZWFkWzFdPTE7CiAgaGxkKDEsMCk7CiBidWlsZCgxLG4sMSk7Cn0KaW50IG1haW4oKXsKICAvL2ZyZW9wZW4oImlucC50eHQiLCJyIixzdGRpbik7CiAgICBzY2FuaW50KG4pOwogICAgZm9yKGludCBpID0gMSA7IGkgPCBuIDsgKytpKXsKICAgICAgICBpbnQgYSxiOwogICAgICAgIHNjYW5pbnQoYSk7c2NhbmludChiKTsKICAgICAgICBhZGpbYSsxXS5wYihiKzEpOwogICAgICAgIGFkaltiKzFdLnBiKGErMSk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgKytpKQogICAgICBzY2FuaW50KGFbaV0pOwogICAgcHJlKCk7CiAgICBpbnQgcTsKICAgIHNjYW5pbnQocSk7CiAgICB3aGlsZShxLS0pewogICAgICAgIGNoYXIgdHlwZSA9IHNjYW5jKCk7CiAgICAgICAgaW50IGwscix2YWw7CiAgICAgICAgc2NhbmludChsKTtzY2FuaW50KHIpOwogICAgICAgIGwrKyxyKys7CiAgICAgICAgaWYodHlwZT09J0YnKXsKICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixzb2x2ZShsLHIpKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgc2NhbmludCh2YWwpOwogICAgICAgICAgICB1cGQobCxyLHZhbCk7CiAgICAgICAgfQogICAgfQp9IA==