using System;
using System.Collections;
using System.Collections.Generic;
class g
{
    static public List<int>[] a;
    static public List<int> b;
    static public bool[] c;
    static public int o = 0,n;
    static public bool gotovo;

}

class HelloWorld
{
    static void putanja(int a,int b,int br)
    {
        if (a == b)
        {
            if (br < g.o) g.o = br;
        }
        else
        {
            foreach(int i in g.a[a])
            {
                if (!g.c[i]) {  g.c[i] = true; putanja(i, b, br + 1); }
            }
        }
    }
   
    static void Main()
    {
        g.n = int.Parse(Console.ReadLine());
        g.a = new List<int>[g.n];
        int[] r = new int[g.n];
        g.c = new bool[g.n];
        g.b = new List<int>();
        for (int i = 0; i < g.n; i++) g.a[i] = new List<int>();
        string[] s=Console.ReadLine().Split(" ");
        for (int i = 0;i < s.Length; i++)
        {
            r[i]=int.Parse(s[i]);
        }
        for (int i = 0; i < g.n - 1; i++)
        {
            s=Console.ReadLine().Split(" ");
            int x = int.Parse(s[0]);
            int y = int.Parse(s[1]);

            g.a[x-1].Add(y-1);
            g.a[y-1].Add(x-1);
        }
        int z=int.Parse(Console.ReadLine());    
        for (int i = 0; i < z; i++)
        {
            s = Console.ReadLine().Split(" ");
            if (s[0] == "1")
            {
                int x = int.Parse(s[1]);
                int y = int.Parse(s[2]);
                x--;y--;
                while (x < y)
                {
                    int e = r[x];
                    r[x] = r[y];
                    r[y] = e;
                    x++;
                    y--;
                }
            } else
            {
                int l = int.Parse(s[1]);
                int t = int.Parse(s[2]);
                int x = int.Parse(s[3]);
                int ma = 0;
                l--;
                t--;
                x--;
                for (int j=l;j<=t; j++)
                {
                    for (int m = 0; m < g.n; m++) g.c[m] = false;
                    g.o = g.n;
                    putanja(j, x, 0);
                    if (ma < g.o) ma = g.o;
                }              
                g.b.Add(ma);
            }
        }
        foreach (int i in g.b) Console.WriteLine(i);
    }
}