You are given a number n and an array b_1, b_2, …, b_{n+2}, obtained according to the following algorithm: 

  * some array a_1, a_2, …, a_n was guessed; 
  * array a was written to array b, i.e. b_i = a_i (1 ≤ i ≤ n); 
  * The (n+1)-th element of the array b is the sum of the numbers in the array a, i.e. b_{n+1} = a_1+a_2+…+a_n; 
  * The (n+2)-th element of the array b was written some number x (1 ≤ x ≤ 10^9), i.e. b_{n+2} = x; The 
  * array b was shuffled. 



For example, the array b=[2, 3, 7, 12 ,2] it could be obtained in the following ways: 

  * a=[2, 2, 3] and x=12; 
  * a=[3, 2, 7] and x=2. 



For the given array b, find any array a that could have been guessed initially.

Input

The first line contains a single integer t (1 ≤ t ≤ 10^4). Then t test cases follow.

The first line of each test case contains a single integer n (1 ≤ n ≤ 2 ⋅ 10^5).

The second row of each test case contains n+2 integers b_1, b_2, …, b_{n+2} (1 ≤ b_i ≤ 10^9).

It is guaranteed that the sum of n over all test cases does not exceed 2 ⋅ 10^5.

Output

For each test case, output: 

  * "-1", if the array b could not be obtained from any array a; 
  * n integers a_1, a_2, …, a_n, otherwise. 



If there are several arrays of a, you can output any.

Example

Input


4
3
2 3 7 12 2
4
9 1 7 1 6 5
5
18 2 2 3 2 9 2
3
2 6 9 2 1


Output


2 3 7 
-1
2 2 2 3 9 
1 2 6 
import java.util.*;
import java.io.*;

public class Solution
{
    static class Reader {
		BufferedReader br;
		StringTokenizer st;
 
		public Reader() {
			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();
		}

		long[] nextArr(int n)
		{
		    long a[]=new long[n];
		    for (int i=0;i<n;i++)a[i]=nextInt();
		    return a;
		}
		
		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 class Ele implements Comparable<Ele> 
    {  
        public int x,y;  
        Ele(int x1,int y1) 
        {  
            x=x1;y=y1; 
        }  
        public int compareTo(Ele ob) {  
        if(ob.x!=x)return x-ob.x;
        return this.y-ob.y;  
        }   
        public String toString()
        {
        	return "["+x+","+y+"]";
        }
    }
    static class MyMath
    {
    	int mod=(int)1e9+7;
    	long subs(long a,long b)
    	{
    		long r=(a%mod-b%mod)%mod;
    		if (r<0) return r+mod;
    		return r;
    	}
    	long binExp(long a,long b)
    	{
    		a=a%mod;
    		long r=1;
    		while (b>0)
    		{
    			if ((b&1)>0)
    				r=(r*a)%mod;
    			a=a*a%mod;
    			b>>=1;
    		}
    		return r;
    	}
    	boolean[] seive(int n)
    	{
    		boolean p[]=new boolean[n+1];
    		p[0]=true;p[1]=true;
    		for (int i=2;i*i<=n;i++)
    		{
    			if (!p[i])
    			{
    				for (int j=2*i;j<=n;j+=i)p[j]=true;
    			}
    		}
    		return p;
    	}
	    long gcd(long max,long min)
	    {
	        long a;
	        while (max%min!=0)
	        {
	            a=max%min;
	            max=min;min=a;
	        }
	        return min;
	    }
	    long sod(long n)
	    {
	        long s=0;
	        while (n>0)
	        {
	            s+=n%10;
	            n/=10;
	        }
	        return s;
	    }
	}
	void disp(PrintWriter o,boolean b)
    {
        if (b) o.println("Yes");
        else o.println("No");
    }
    void disp(PrintWriter o,int ...a)
    {
        o.println(Arrays.toString(a));
    }
    void disp(PrintWriter o,long ...a)
    {
        o.println(Arrays.toString(a));
    }
    int dp[][];

	public static void main(String[] args) throws IOException 
	{
		Reader sc=new Reader();Solution G=new Solution();MyMath mm=new MyMath();
		PrintWriter o = new PrintWriter(System.out);
		int t=1;t=sc.nextInt();
		int mod=(int)1e9+7;
		long x,x0,x1,x2;long y,y0,y1,y2;int s,s0,s1,s2;
		int n,m;long a[],b[],in[],in1[];
		long k,l;boolean v[],b1,b2;String ss;char c1[];
		//long l;long a[]; 
		ArrayList<ArrayList<Integer>> ll=new ArrayList<>();
		ArrayList<Integer> a1=new ArrayList<>();
		ArrayList<Integer> a2=new ArrayList<>();
		PriorityQueue<Integer> pq1=new PriorityQueue<>();
		PriorityQueue<Integer> pq2=new PriorityQueue<>(Collections.reverseOrder());
		ArrayDeque<Integer> dq=new ArrayDeque<>();
		TreeSet<Integer> h0=new TreeSet<>();
		TreeSet<Integer> h1=new TreeSet<>();
		HashMap<Long,Integer> h=new HashMap<>();
		try{
		while (t-->0)
		{
		    n=sc.nextInt();a=sc.nextArr(n+2);x=-1;y=-1;
		    l=0;for (long i:a){l+=i;if (h.containsKey(i))h.put(i,h.get(i)+1);else h.put(i,1);}
		    //o.println(h);
		    for (int i=0;i<n+2;i++)
		    {
		        if (h.containsKey(a[i]))h.put(a[i],h.get(a[i])-1);
		        if (h.get(a[i])==0)h.remove(a[i]);
		        l-=a[i];
		        //o.println(l);
		        if (l%2==0 && h.containsKey(l/2)) {x=a[i];y=l/2;}
		        
		        l+=a[i];
		        if (h.containsKey(a[i]))h.put(a[i],h.get(a[i])+1);else h.put(a[i],1);
		    }
		    if (x==-1)o.println(x);
		    else 
		    {
		        for (long i:a)if (x!=i && y!=i)o.print(i+" ");
		        else if (i==x)x=-1;
		        else if (i==y)y=-1;
		        o.println();
		    }
		    
		    
		    
		    
		    
		    //o.println();
		    //o.println();
		    //o.println(h);
		    //o.println(x2);
		    //o.println();
		    h0.clear();ll.clear();a1.clear();a2.clear();h1.clear();h.clear();pq1.clear();pq2.clear();
		}
		}
		catch (Throwable e)
		{
		    e.printStackTrace();
		}
		//o.println("HI");
		
        o.flush();
        o.close();
	}
} 