#include <bits/stdc++.h>
#define ll long long
#define MAXN 80010
using namespace std;
ll p[MAXN];
vector<vector<ll> > G(MAXN);
map<pair<ll,ll>,ll> D;
vector<bool> V(MAXN);
void DFS(ll p,ll i,ll k,ll d)
{
    V[i]=true;
    if (i==k)
    {
        D[{p,k}]=d;
        return;
    }
    for (ll next : G[i])
    {
        if (!V[next])
        {
            DFS(p,next,k,d+1);
        }
    }
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n,q,u,v,t,a,b,l,r,x;
    cin >> n;
    for (ll i=1;i<=n;i++)
        cin >> p[i];
    for (ll i=1;i<n;i++)
    {
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for (ll i=1;i<=n;i++)
    {
        for (ll j=i+1;j<=n;j++)
        {
            fill(V.begin(),V.end(),false);
            DFS(i,i,j,0);
        }
    }
    cin >> q;
    while (q--)
    {
        cin >> t;
        if (t==1)
        {
            cin >> a >> b;
            swap(p[a],p[b]);
            continue;
        }
        ll ans=LLONG_MIN;
        cin >> l >> r >> x;
        for (ll i=l;i<=r;i++)
        {
            fill(V.begin(),V.end(),false);
            ans=max(ans,D[{min(x,p[i]),max(x,p[i])}]);
        }
        cout << ans << "\n";
    }
    return 0;
}