#include <bits/stdc++.h>
#define pb push_back

using namespace std;

vector<int> red;
vector<vector<int> > pov;
int d[80000][80000];

void dis(int x, int y, int dist, bool pos[]){
	pos[y]=true;
	for(int i=0;i<pov[y].size();i++){
		if(pos[pov[y][i]]==false){
			d[x][pov[y][i]]=dist+1;
			dis(x,pov[y][i],dist+1,pos);
		}
	}
	return;
}

int main(){
	int n; cin>>n;
	for(int i=0;i<n;i++){
		int pom; cin>>pom;
		red.pb(pom);
	}
	for(int i=1;i<n+1;i++){
		vector<int> a; a.pb(i);
		pov.pb(a);
	}
	for(int i=0;i<n-1;i++){
		int pom1,pom2; cin>>pom1>>pom2;
		pov[pom1].pb(pom2); pov[pom2].pb(pom1);
	}
	for(int i=0;i<n;i++){
		bool pos[80000]={false};
		dis(i,i,0,pos);
	}
	int q; cin>>q;
	for(int i=0;i<q;i++){
		int ac; cin>>ac;
		if(ac==1){
			int a,b; cin>>a>>b;
			swap(red[a],red[b]);
		}else{
			int l,r,x; cin>>l>>r>>x;
			int maxd=0;
			for(int i=l-1;i<r;i++){
				if(d[x][i]>maxd){
					maxd=d[x][i];
				}
			}
			cout<<maxd<<"\n";
		}
	}
	
	return 0;
}