You are given three sequences: a_1, a_2, …, a_n; b_1, b_2, …, b_n; c_1, c_2, …, c_n.

For each i, a_i ≠ b_i, a_i ≠ c_i, b_i ≠ c_i.

Find a sequence p_1, p_2, …, p_n, that satisfy the following conditions:

  * p_i ∈ \\{a_i, b_i, c_i\}
  * p_i ≠ p_{(i mod n) + 1}.



In other words, for each element, you need to choose one of the three possible values, such that no two adjacent elements (where we consider elements i,i+1 adjacent for i<n and also elements 1 and n) will have equal value.

It can be proved that in the given constraints solution always exists. You don't need to minimize/maximize anything, you need to find any proper sequence.

Input

The first line of input contains one integer t (1 ≤ t ≤ 100): the number of test cases.

The first line of each test case contains one integer n (3 ≤ n ≤ 100): the number of elements in the given sequences.

The second line contains n integers a_1, a_2, …, a_n (1 ≤ a_i ≤ 100).

The third line contains n integers b_1, b_2, …, b_n (1 ≤ b_i ≤ 100).

The fourth line contains n integers c_1, c_2, …, c_n (1 ≤ c_i ≤ 100).

It is guaranteed that a_i ≠ b_i, a_i ≠ c_i, b_i ≠ c_i for all i.

Output

For each test case, print n integers: p_1, p_2, …, p_n (p_i ∈ \\{a_i, b_i, c_i\}, p_i ≠ p_{i mod n + 1}).

If there are several solutions, you can print any.

Example

Input


5
3
1 1 1
2 2 2
3 3 3
4
1 2 1 2
2 1 2 1
3 4 3 4
7
1 3 3 1 1 1 1
2 4 4 3 2 2 4
4 2 2 2 4 4 2
3
1 2 1
2 3 3
3 1 2
10
1 1 1 2 2 2 3 3 3 1
2 2 2 3 3 3 1 1 1 2
3 3 3 1 1 1 2 2 2 3


Output


1 2 3
1 2 1 2
1 3 4 3 2 4 2
1 3 2
1 2 3 1 2 3 1 2 3 2

Note

In the first test case p = [1, 2, 3].

It is a correct answer, because:

  * p_1 = 1 = a_1, p_2 = 2 = b_2, p_3 = 3 = c_3 
  * p_1 ≠ p_2 , p_2 ≠ p_3 , p_3 ≠ p_1 



All possible correct answers to this test case are: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1].

In the second test case p = [1, 2, 1, 2].

In this sequence p_1 = a_1, p_2 = a_2, p_3 = a_3, p_4 = a_4. Also we can see, that no two adjacent elements of the sequence are equal.

In the third test case p = [1, 3, 4, 3, 2, 4, 2].

In this sequence p_1 = a_1, p_2 = a_2, p_3 = b_3, p_4 = b_4, p_5 = b_5, p_6 = c_6, p_7 = c_7. Also we can see, that no two adjacent elements of the sequence are equal.
//package MyJavaProject;
 
import java.util.*;
import java.lang.Math;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.io.*;
import java.math.BigInteger;  

public class Main 
{
	static class FastReader 

	    { 
	        BufferedReader br; 
	        StringTokenizer st; 
	  
	        public FastReader() 
	        { 
	            br = new BufferedReader(new
	                     InputStreamReader(System.in)); 
	        } 
	  
	        String next() 
	        { 
	            while (st == null || !st.hasMoreElements()) 
	            { 
	                try
	                { 
	                    st = new StringTokenizer(br.readLine()); 
	                } 
	                catch (IOException  e) 
	                { 
	                    e.printStackTrace(); 
	                } 
	            } 
	            return st.nextToken(); 
	        } 
	  
	        int nextInt() 
	        { 
	            return Integer.parseInt(next()); 
	        } 
	  
	        long nextLong() 
	        { 
	            return Long.parseLong(next()); 
	        } 
	  
	        double nextDouble() 
	        { 
	            return Double.parseDouble(next()); 
	        } 
	  
	        String nextLine() 
	        { 
	            String str = ""; 
	            try
	            { 
	                str = br.readLine(); 
	            } 
	            catch (IOException e) 
	            { 
	                e.printStackTrace(); 
	            } 
	            return str; 
	        } 
	    }


	static void print(String s)
	{
		System.out.print(s);
	}
	static void print(boolean s)
	{
		System.out.print(s);
	}
	
	static boolean isPrime(long n) 
	{ 
		// Corner cases 
		if (n <= 1) 
			return false; 
		if (n <= 3) 
			return true; 

		// This is checked so that we can skip 
		// middle five numbers in below loop 
		if (n % 2 == 0 || n % 3 == 0) 
			return false; 

		for (int i = 5; i * i <= n; i = i + 6) 
			if (n % i == 0 || n % (i + 2) == 0) 
				return false; 

		return true; 
	} 

	static FastReader f=new FastReader();
	static long[] inArr(long a[],int n)
	{
		for(int i=0;i<n;i++)
			a[i]=f.nextLong();
		return(a);
	}
	static void printArr(long a[],int n)
	{
		for(int i=0;i<n;i++)
			System.out.print(a[i]+" ");
		System.out.println();
	}
	static long bincon(long x,long y)
	{
		String binx=Long.toBinaryString(x);
		String biny=Long.toBinaryString(y);
		String xpy=binx+biny;
		String ypx=biny+binx;
		//System.out.println(binx+" "+biny);
		return(Long.parseLong(xpy, 2)-Long.parseLong(ypx, 2));
	}
	public static int SumPairs(int[] input, int k){
	    Map<Integer, Integer> frequencies = new HashMap<>();
	    int pairsCount = 0;      

	    for(int i=0; i<input.length; i++){
	        int value = input[i];
	        int complement = k - input[i];

	        if(frequencies.containsKey(complement)){                
	            int freq = frequencies.get(complement) - 1;
	            pairsCount++;
	            //System.out.println(value + ", " + complement);    
	            if(freq == 0){
	                frequencies.remove(complement);
	            }else{
	                frequencies.put(complement, freq);
	            }
	        }else{
	            if(frequencies.containsKey(value)){         
	                frequencies.put(value, frequencies.get(value) + 1);             
	            }else{
	                frequencies.put(value, 1);
	            }
	        }
	    }
	    return pairsCount;
	}
	 void merge(long arr[], int l, int m, int r) 
	    { 
	        // Find sizes of two subarrays to be merged 
	        int n1 = m - l + 1; 
	        int n2 = r - m; 
	  
	        /* Create temp arrays */
	        long L[] = new long[n1]; 
	        long R[] = new long[n2]; 
	  
	        /*Copy data to temp arrays*/
	        for (int i = 0; i < n1; ++i) 
	            L[i] = arr[l + i]; 
	        for (int j = 0; j < n2; ++j) 
	            R[j] = arr[m + 1 + j]; 
	  
	        /* Merge the temp arrays */
	  
	        // Initial indexes of first and second subarrays 
	        int i = 0, j = 0; 
	  
	        // Initial index of merged subarry array 
	        int k = l; 
	        while (i < n1 && j < n2) { 
	            if (L[i] <= R[j]) { 
	                arr[k] = L[i]; 
	                i++; 
	            } 
	            else { 
	                arr[k] = R[j]; 
	                j++; 
	            } 
	            k++; 
	        } 
	  
	        /* Copy remaining elements of L[] if any */
	        while (i < n1) { 
	            arr[k] = L[i]; 
	            i++; 
	            k++; 
	        } 
	  
	        /* Copy remaining elements of R[] if any */
	        while (j < n2) { 
	            arr[k] = R[j]; 
	            j++; 
	            k++; 
	        } 
	    } 
	  
	    // Main function that sorts arr[l..r] using 
	    // merge() 
	    void sort(long arr[], int l, int r) 
	    { 
	        if (l < r) { 
	            // Find the middle point 
	            int m = (l + r) / 2; 
	  
	            // Sort first and second halves 
	            sort(arr, l, m); 
	            sort(arr, m + 1, r); 
	  
	            // Merge the sorted halves 
	            merge(arr, l, m, r); 
	        } 
	    }
    
    static int power(int x, int y, int p) 
    { 
        // Initialize result 
        int res = 1;      
         
        // Update x if it is more   
        // than or equal to p 
        x = x % p;  
  
       if (x == 0) return 0; // In case x is divisible by p;    
  
        while (y > 0) 
        { 
            // If y is odd, multiply x 
            // with result 
            if((y & 1)==1) 
                res = (res%p * x%p) % p; 
      
            // y must be even now 
            // y = y / 2 
            y = y >> 1;  
            x = (x%p * x%p) % p;  
        } 
        return res; 
    } 
    static int modFact(int n, 
            int p) 
{ 
if (n >= p) 
 return 0; 

int result = 1; 
for (int i = 1; i <= n; i++) 
 result = (result%p * i%p) % p; 

return result; 
} 

    static int nCr(int n, int r) 
    { 
        return fact(n) / (fact(r) * 
                      fact(n - r)); 
    } 
      
    // Returns factorial of n 
    static int fact(int n) 
    { 
        int res = 1; 
        for (int i = 2; i <= n; i++) 
            res = res * i; 
        return res; 
    } 
	public static void main(String argsp[]) throws Exception
	{
		Main ob=new Main();
		BufferedWriter w=new BufferedWriter(new OutputStreamWriter(System.out));
		Random rand = new Random();
		//Scanner sc=new Scanner(System.in);
		//int k=f.nextInt();
		int t=f.nextInt();
		while(t--!=0)
		{
			int n=f.nextInt();
			int a[]=new int[n];
			int b[]=new int[n];
			int c[]=new int[n];
			for(int i=0;i<n;i++)
				a[i]=f.nextInt();
			for(int i=0;i<n;i++)
				b[i]=f.nextInt();
			for(int i=0;i<n;i++)
				c[i]=f.nextInt();
			int p[]=new int[3*n];
			int i0=0;
			p[0]=a[0];
			for(int i=1;i<n-1;i++)
			{
				
				if(a[i]!=p[i-1])
					p[i]=a[i];
				else if(b[i]!=p[i-1])
					p[i]=b[i];
				else 
					p[i]=c[i];
			}
			if(a[n-1]!=p[0] && a[n-1]!=p[n-2])
				p[n-1]=a[n-1];
			else if(b[n-1]!=p[0]&& b[n-1]!=p[n-2])
				p[n-1]=b[n-1];
			else
				p[n-1]=c[n-1];
			for(int i=0;i<n;i++)
				w.write(p[i]+" ");
			w.write("\n");
			
		}
		w.flush();
		
		
		
		
	}
}