#include <iostream>
#include <stdio.h>
using namespace std;

int povezanost[80000][80000];
int redosled[80000];
int n;
char posecenost[80000];
int k = 0;

int udaljenost(int prvi, int drugi)
{
    posecenost[prvi] = 1;
    for(int i = 0; i < n; i++)
    {
        if(povezanost[i][prvi] == 1)
        {
            if(posecenost[i] == 0)
            {
                if(i == drugi)
                {
                    k++;
                    return 1;
                }
                else
                {
                    if(udaljenost(i, drugi) == 1)
                    {
                        k++;
                        return 1;
                    }
                }
            }
        }
    }
    return 0;
}

void zamena(int prvo, int drugo)
{
    int p = redosled[prvo];
    redosled[prvo] = redosled[drugo];
    redosled[drugo] = p;
}

void lopovi(int mesto, int prvo, int drugo)
{
    int max;
    
    for(int i = prvo; i < drugo; i++)
    {
        for(int j = 0; j < n; j++)
            posecenost[j] = 0;
        if(max < udaljenost(mesto, redosled[i]))
        {
            max = udaljenost(mesto, redosled[i]);
        }
        k = 0;
    }
    cout << max;
}

int main()
{
    int q, a, b, x, l, r;
    cin >> n;
    int px, py, pq;
    for(int i = 0; i < n; i++)
    {
        cin >> redosled[i];
        redosled[i]--;
    }
    for(int i = 0; i < n - 1; i++)
    {
        cin >> px >> py;
        povezanost[px - 1][py - 1] = 1;
    }
    cin >> q;
    for(int i = 0; i < q; i++)
    {
        cin >> pq;
        if(pq == 1)
        {
            cin >> a >> b;
            zamena(a - 1, b - 1);
        }
        else
        {
            cin >> x, l, r;
            lopovi(x - 1, l - 1, r - 1);
        }
    }
}