#include<bits/stdc++.h>
using namespace std;
int a,b,c,br,n,m;
vector <int> v;
void jedan(int a,int b){
    int A[80005],B[80005];
    for(int i=0;i<v[a].size();i++){
        A[i]=v[a][i];
    }
    for(int i=0;i<v[b].size();i++){
        B[i]=v[b][i];
    }
    for(int i=0;i<b.size();i++){
        v[a][i]=B[i];
    }
    for(int i=0;i<a.size();i++){
        v[b][i]=A[i];
    }
}
void dva(int l,intr,int x){
    posecen[x]=true;
    br++;
    r=max(br,r);
    for (int i=0; i<v[x].size(); i++){ 
        if (!posecen[v[x][i]]){           
            dfs(v[x][i]);
        }
    }                       
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>m[i];
    }
    for(int i=1;i<n;i++){
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    cin m;
    for(int i=1;i<=m;i++){
        cin>>c;
        if(c==1){
            cin>>a>>b;
            jedan(a,b);
        }
        else{
            cint>>l>>r>>x;
            br=0;
            dva(l,r,x);
        }
    }
    return 0;
}