import java.util.*;
import java.io.*; 

public class code{
	
	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 int GCD(int a, int b) 
    { 
      if (b == 0) 
        return a; 
      return GCD(b, a % b);  
    } 
	
	public static void main(String[] arg) throws IOException{
		Reader in=new Reader();
		//Scanner in=new Scanner(System.in);
		
		int t=in.nextInt();
		
		while(t-- > 0){
			int n=in.nextInt();
			
			ArrayList<Integer> al=new ArrayList<Integer>();
			
			for(int i=0;i<n;i++){
				al.add(in.nextInt());
			}
			
			Collections.sort(al);
			
			int gcd=al.get(al.size()-1);
			
			int index=al.size()-1;
			al.remove(index);
			ArrayList<Integer> res=new ArrayList<Integer>();
			res.add(gcd);
			for(int i=0;i<n-1;i++){
				
				int val=gcd;
				gcd=GCD(val,al.get(0));
				index=0;
				for(int j=1;j<al.size();j++){
					int x=GCD(val,al.get(j));
					if(x>gcd){
						gcd=x;
						index=j;
					}
				}
				
				res.add(al.get(index));
				al.remove(index);
				
				if(gcd==1)
					break;
			}
			
			for(int i=0;i<res.size();i++)
				System.out.print(res.get(i)+" ");
			
			for(int i=0;i<al.size();i++)
				System.out.print(al.get(i)+" ");
			
			System.out.println();
		}
	}	
}