
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Round669B {

	
	public static int gcd(int a, int b) 
	{ 
	    if (b == 0) 
	        return a; 
	    return gcd(b, a % b);  
	      
	} 
	   
	public static void main(String[] args) throws IOException {
		Reader fs =  new Reader();
		int test = fs.nextInt();
		while(test-->0) {
			int n = fs.nextInt();
			int arr[] =  new int[n];
			boolean check[] = new boolean[n];
			int result[] =  new int[n];
			for (int i = 0; i < arr.length; i++) {
				arr[i] = fs.nextInt();
			}
			int gcd = 0;
			for (int i = 0; i < result.length; i++) {
				int index = i;
				int max = 0;
				for (int j = 0; j < result.length; j++) {
					if(!check[j]) {
						int currGcd = gcd(gcd,arr[j]);
						if(currGcd>max) {
							max = currGcd;
							index = j;
						}
					}
				}
				result[i] = arr[index];
				gcd = max;
				check[index] = true; 
			}
			for (int i = 0; i < result.length; i++) {
				System.out.print(result[i] + " ");
			}
			System.out.println();
		}

	}
	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();
	}
	}
	}

