using System;

namespace _5
{
    class Program
    {
        static void Citaj1(int[] x, int n)
        {
            string[] s = Console.ReadLine().Split();
            for(int i = 0; i < n; i++)
            {
                x[i] = int.Parse(s[i]);
            }
        }
        static void Citaj2(int[,] x, int n)
        {
            for(int i = 0; i < n - 1; i++)
            {
                string[] s = Console.ReadLine().Split();
                x[i, 0] = int.Parse(s[0]);
                x[i, 1] = int.Parse(s[1]);
            }
        }
        static void Citaj3(int[][] x, int n)
        {
            for(int i = 0; i < n; i++)
            {
                string[] s = Console.ReadLine().Split();
                int[] y = new int[s.Length];
                for(int j = 0; j < s.Length; j++)
                {
                    y[j] = int.Parse(s[j]);
                }
                x[i] = y;
            }
        }
        static void Razmeni(ref int a, ref int b)
        {
            int t = a;
            a = b;
            b = t;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] x = new int[n];
            int[,] y = new int[n - 1, 2];
            Citaj1(x, n);
            Citaj2(y, n);
            int q = int.Parse(Console.ReadLine());
            int[][] z = new int[q][];
            Citaj3(z, q);
            for(int i = 0; i < q; i++)
            {
                if (z[i][0] == 1)
                {
                    for(int j = 0; j < n; j++)
                    {
                        for(int k = 0; k < n; k++)
                        {
                            if(z[i][1]==x[j] && z[i][2]==x[k])
                            {
                                Razmeni(ref x[j], ref x[k]);
                            }
                        }
                    }
                }
                else
                {
                    int s = 0;
                    for (int j = 0; j < n - 1; j++)
                    {
                        s = 1;
                        if (z[i][3] == y[j, 0])
                        {
                            for(int k = 0; k < n - 1; k++)
                            {
                                if((y[j,1]==y[k,0] || y[j,1]==y[k,1])&& y[k,0]!=x[j+1] || y[k,1] != x[j + 1])
                                {
                                    s++;
                                    if (y[j, 1] == y[k, 0])
                                        y[j, 1] = y[k, 0];
                                    else
                                        y[j, 1] = y[k, 1];
                                }
                            }
                        }
                        else
                        {
                            for (int k = 0; k < n - 1; k++)
                            {
                                if ((y[j, 0] == y[k, 0] || y[j, 0] == y[k, 1]) && y[k, 0] != x[j + 1] || y[k, 1] != x[j + 1])
                                {
                                    s++;
                                    if (y[j, 0] == y[k, 0])
                                        y[j, 0] = y[k, 0];
                                    else
                                        y[j, 0] = y[k, 1];
                                }
                            }
                        }
                    }
                    Console.WriteLine(s);
                }
            }
        }
    }
}