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 C (judge verdict: Time Limit Exceeded)

#include <stdio.h>
#include <stdlib.h>

int cmp (void const *a,const void *b)
{
	return (long long *)a-(long long *)b;
}

long long  gcd(long long a,long long b)
{
	if (b%a==0) return a;
	else return gcd(b%a,a);
}

int main(void)
{
	long long a[300],b,g,k,p;
	int n,i,j;
	
	while(scanf("%d",&n)==1&&n)
	{
		j=0;
		b=9999999999999999;
		for (i=0;i<n*(n+1)/2;i++)
		{
			scanf("%lld",&a[j]);
			if (a[j]%2==1&&b>a[j]) b=a[j];
			if (a[j]%2==0) 
			{
				j++;
			}
			
		}
		qsort(a,j,sizeof (a[0]),cmp);
			g=a[0];
			for (i=0;i<j;i++)
			{
				g=gcd(g,a[i]);
			}
			for (k=1;k<=g/2;k+=2)
			{
				p=g/k;
				if (g%k==0&&(a[1]/(p)*a[0]/p==b))
				{
					printf("%lld\n",p);
					for (i=0;i<j;i++)
					{
						if (i!=0) printf(" ");
						printf("%lld",a[i]/p);
					}
					printf("\n");
				}
			}

	}
	return 0;
}