Problem:
Problem H: Squid Multiplication

Squid Eiko loves mathematics.
Especially she loves to think about integer.
One day, Eiko found a math problem from a website.

"A sequence b ={ai + aj | i < j } is generated from a sequence a ={a0 , ... , an | ai is even if i is 0, otherwise ai is odd}. Given the sequence b , find the sequence a ."

This problem is easy for Eiko and she feels boring. So, she made a new problem by modifying this problem .

"A sequence b ={ai *aj | i < j } is generated from a sequence a ={ a0, ... , an | ai is even if i is 0, otherwise ai is odd}. Given the sequence b , find the sequence a ."

Your task is to solve the problem made by Eiko.

Input

Input consists of multiple datasets.

Each dataset is given by following formats.

n
b0 b1 ... bn*(n+1)/2-1

n is the number of odd integers in the sequence a. The range of n is 2 ≤ n ≤ 250.
bi is separated by a space.
Each bi is 1 ≤ bi ≤ 263-1.
The end of the input consists of a single 0.

Output

For each dataset, you should output two lines.
First line contains a0, an even number in the sequence a.
The second line contains n odd elements separated by a space. The odd elements are sorted by increasing order.
You can assume that the result is greater than or equal to 1 and less than or equal to 231-1.

Sample input

3
6 10 14 15 21 35
2
30 42 35
0

Sample output

2
3 5 7
6
5 7

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static long gcd(long a, long b) {
		if (a < b) {
			a ^= b;
			b ^= a;
			a ^= b;
		}
		if (b == 0) {
			return a;
		}
		return gcd(b, a % b);
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n;
		long b[];
		long ini;
		long even[];
		int eid;
		long a[];
		int aid;

		while (true) {
			n = sc.nextInt();
			if (n == 0) {
				break;
			}

			even = new long[n];
			eid = 0;
			a = new long[n];
			aid = 0;
			b = new long[n*(n+1)/2];
			for (int i = 0; i < b.length; i++) {
				b[i] = sc.nextLong();
				if (b[i] % 2 == 0) {
					even[eid++] = b[i];
				}
			}

			ini = gcd(even[0], even[1]);
			for (int i = 2; i < n; i++) {
				ini = gcd(ini, even[i]);
			}
			for (int i = 0; i < n; i++) {
				if (ini != 0) {
					a[i] = even[i] / ini;
				} else {
					a[i] = even[i];
				}
			}
			Arrays.sort(a);
			Arrays.sort(b);
			if (a[n - 1] * a[n - 2] != b[b.length - 1]) {
				long ka = a[n - 1] * a[n - 2];
				long kb = b[b.length - 1];
				long k = kb / ka;
				long d = (long)(Math.sqrt(k));
				ini /= d;
				for (int i = 0; i < n; i++) {
					a[i] *= d;
				}
			}
			
			System.out.println(ini);
			String s = "";
			for (int i = 0; i < n; i++) {
				System.out.print(s + a[i]);
				s = " ";
			}
			System.out.println();
		}
	}
}