using System;
using System.Collections.Generic;

namespace takmicenje4
{
    class Program
    {
        static void Main(string[] args)
        {
            long n = long.Parse(Console.ReadLine());
            long[] nizn = new long[10000000000];
            long[] nizk = new long[10000000000];
            int br = 1;

            string[] ulazz = Console.ReadLine().Split();
            for (int d = 1; d < ulazz.Length; d++)
            {
                nizn[d] = long.Parse(ulazz[d]);
                if (d == (n - 1))
                {
                    nizn[d+1] = 0;
                    nizn[0] = 0;
                }
            }

            for(int c = 0; c < (n - 1); c++)
            {
                string[] ulaz = Console.ReadLine().Split();
                long a = long.Parse(ulaz[0]);
                long b = long.Parse(ulaz[1]);
                nizk[br] = a;
                nizk[br + 1] = b;
                br += 2;
                if (c == (n - 2))
                {
                    nizk[0] = 0;
                    nizk[br] = 0;
                }
            }

            long q = long.Parse(Console.ReadLine());
            for (int c = 0; c < q; c++)
            {
                string[] ulaz2 = Console.ReadLine().Split();
                if (ulaz2.Length == 3)
                {
                    long p = long.Parse(ulaz2[1]);
                    long p1= long.Parse(ulaz2[2]);
                    long pom = nizn[p];
                    nizn[p] = nizn[p1];
                    nizn[p1] = pom;
                }
                else
                {
                    int brojac = 0;
                    long pomoc = 0;
                    long pomoc2 = 0;
                    long pomocna = -1;
                    long pomocna1 = -1;
                    long pom1 = long.Parse(ulaz2[1]);
                    long pom2 = long.Parse(ulaz2[2]);
                    long x = long.Parse(ulaz2[3]);
                    for (long i = pom1; i <= pom2; i++)
                    {
                        for (int j = 0; j < nizk.Length; j++)
                        {
                            if (nizn[j] == x)
                            {
                                pomoc = j;
                            }
                        }
                        for (int s = 0; s < nizk.Length; s++)
                        {
                            if (nizn[s] == x)
                            {
                                pomoc2 = s;
                            }
                        }
                        for (int y = 0; y < nizk.Length; y++)
                        {
                            if (nizn[pomoc + 1] > nizn[pomoc - 1])
                            {
                                pomocna = nizn[pomoc + 1];
                            }
                            else { pomocna = nizn[pomoc - 1]; }
                            if (pomocna == nizk[y])
                            {
                                if ((nizk[pomoc2 + 1] == pomocna)||(nizk[pomoc2 - 1]==pomocna))
                                    {
                                    brojac++;
                                    }
                            }
                        }
                    }
                }
            }
        }
    }
}