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.

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
import java.util.*;
     //FuCk ThE RaTiNgS.
     //YoU NeVeR LoSe EiThEr YoU LeArN Or YoU WiN.

public class A {
  static class Reader 
  { 
      final private int BUFFER_SIZE = 1 << 16; 
      private DataInputStream din; 
      private byte[] buffer; 
      private int bufferPointer, bytesRead; 

      public Reader() 
      { 
          din = new DataInputStream(System.in); 
          buffer = new byte[BUFFER_SIZE]; 
          bufferPointer = bytesRead = 0; 
      } 

      public Reader(String file_name) throws IOException 
      { 
          din = new DataInputStream(new FileInputStream(file_name)); 
          buffer = new byte[BUFFER_SIZE]; 
          bufferPointer = bytesRead = 0; 
      } 

      public String readLine() throws IOException 
      { 
          byte[] buf = new byte[64]; // line length 
          int cnt = 0, c; 
          while ((c = read()) != -1) 
          { 
              if (c == '\n') 
                  break; 
              buf[cnt++] = (byte) c; 
          } 
          return new String(buf, 0, cnt); 
      } 

      public int nextInt() throws IOException 
      { 
          int ret = 0; 
          byte c = read(); 
          while (c <= ' ') 
              c = read(); 
          boolean neg = (c == '-'); 
          if (neg) 
              c = read(); 
          do
          { 
              ret = ret * 10 + c - '0'; 
          }  while ((c = read()) >= '0' && c <= '9'); 

          if (neg) 
              return -ret; 
          return ret; 
      } 

      public long nextLong() throws IOException 
      { 
          long ret = 0; 
          byte c = read(); 
          while (c <= ' ') 
              c = read(); 
          boolean neg = (c == '-'); 
          if (neg) 
              c = read(); 
          do { 
              ret = ret * 10 + c - '0'; 
          } 
          while ((c = read()) >= '0' && c <= '9'); 
          if (neg) 
              return -ret; 
          return ret; 
      } 

      public double nextDouble() throws IOException 
      { 
          double ret = 0, div = 1; 
          byte c = read(); 
          while (c <= ' ') 
              c = read(); 
          boolean neg = (c == '-'); 
          if (neg) 
              c = read(); 

          do { 
              ret = ret * 10 + c - '0'; 
          } 
          while ((c = read()) >= '0' && c <= '9'); 

          if (c == '.') 
          { 
              while ((c = read()) >= '0' && c <= '9') 
              { 
                  ret += (c - '0') / (div *= 10); 
              } 
          } 

          if (neg) 
              return -ret; 
          return ret; 
      } 

      private void fillBuffer() throws IOException 
      { 
          bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
          if (bytesRead == -1) 
              buffer[0] = -1; 
      } 

      private byte read() throws IOException 
      { 
          if (bufferPointer == bytesRead) 
              fillBuffer(); 
          return buffer[bufferPointer++]; 
      } 

      public void close() throws IOException 
      { 
          if (din == null) 
              return; 
          din.close(); 
      } 
  } 

 public static void main(String[] args)throws Exception  {
  
   Scanner sc= new Scanner(System.in);
   int t=sc.nextInt();
   while(t-->0) {
     int n=sc.nextInt();
     int a[]=new int[n],b[]=new int[n],c[]=new int[n];
     for(int i=0;i<n;i++) {
       a[i]=sc.nextInt();
     }
     for(int i=0;i<n;i++) {
       b[i]=sc.nextInt();
     }
     for(int i=0;i<n;i++) {
       c[i]=sc.nextInt();
     }
     int p[]=new int[n];
 Stack<Integer> s=new Stack<>();
  for(int i=0;i<n;i++) {
    if(s.isEmpty()) {
      s.push(a[i]);
      continue;
    }
    
    if(s.size()>=n) {
      break;
    }
    if(s.size()<n&&a[i]!=s.peek()) {
      s.push(a[i]);
      continue;
    }
    if(s.size()<n&&b[i]!=s.peek()) {
      s.push(b[i]);
      continue;
    }
     if(s.size()<n&&c[i]!=s.peek()) {
       s.push(c[i]);
       continue;
     }
       if(s.size()>=n) {
         break;
       }
    }
  
  String ss="";
   while(!s.isEmpty()) {
    ss+=s.pop();
   }
for(int i=ss.length()-1;i>=0;i--) {
  System.out.print(ss.charAt(i)+" ");
}
     
System.out.println();
     
   }


 }


 static long modInverse(long fac, int p) 
 { 
     return pow(fac, p - 2); 
 } 


 static long nCr(int n, int r, 
                          int p) 
 { 

   
     if (r == 0) 
         return 1; 


     long [] fac = new long [n + 1]; 
     fac[0] = 1; 

     for (int i = 1; i <= n; i++) 
         fac[i] = fac[i - 1] * i % p; 

     return (fac[n] * modInverse(fac[r], p) 
             % p * modInverse(fac[n - r], p) 
             % p) 
         % p; 
 } 


 public static long[] fact;
 public static long[] invfact;
 public static long ncr(int n, int r){
   if(r > n) return 0;
   return ((((fact[n]) * (invfact[r])) % mod)* invfact[n-r]) % mod;
}
static int mod=(int)1e9+7;
static long pow(long x,long y) {
  long res=1l;
  while(y!=0) {
    if(y%2==1) {
      res=x*res%mod;
    }
    y/=2;
    x=x*x%mod;
  }
  return res;
}

}
class pair {
  int x,y;
  pair(int x,int y){
    this.x=x;
    this.y=y;
  }

}
