#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
long long b[50005];
long long a[250];
int n;
long long kgcd(long long a, long long b)
{ 
    if (a == 0) return b; 
    if (b == 0) return a; 
    if (!(a & 1) && !(b & 1)) 
        return kgcd(a>>1, b>>1)<<1;
    else if (!(b & 1))
		return kgcd(a, b>>1); 
    else if (!(a & 1)) return kgcd(a>>1, b); 
    else return kgcd(abs(a - b), a > b ? b : a); 
} 

int main()
{
	int n, i, j;
	long long temp;
	while( cin >> n , n ) {
		for( i = 0 ; i < n * ( n + 1 ) / 2  ; ++ i ) 
			scanf( "%lld" , &b[i] );
		temp = b[0];
		for( i = 1 ; i < n ; i++ ) {
			temp = kgcd( b[i] , temp );
		}
		for( j = 0 ; j < n ; ++ j ) {
			a[j] = b[j] / temp;
		}
		temp /= sqrt( b[n] / a[0] / a[1] );
		for( i = 0 ; i < n ; ++i ) {
			a[i] = b[i] / temp;
		}
		printf( "%lld\n" , temp );
		sort( a , a + n );
		for( j = 0 ; j < n ; ++ j ) {
			if( j != n - 1 )
				printf( "%lld " , a[j] );
			else
				printf( "%lld\n" , a[j] ); 
		}
	}
	return 0;
}
### Prompt

Create a solution in cpp for the following 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.

Example

Input

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


Output

2
3 5 7
6
5 7

### Response

```cpp
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
long long b[50005];
long long a[250];
int n;
long long kgcd(long long a, long long b)
{ 
    if (a == 0) return b; 
    if (b == 0) return a; 
    if (!(a & 1) && !(b & 1)) 
        return kgcd(a>>1, b>>1)<<1;
    else if (!(b & 1))
		return kgcd(a, b>>1); 
    else if (!(a & 1)) return kgcd(a>>1, b); 
    else return kgcd(abs(a - b), a > b ? b : a); 
} 

int main()
{
	int n, i, j;
	long long temp;
	while( cin >> n , n ) {
		for( i = 0 ; i < n * ( n + 1 ) / 2  ; ++ i ) 
			scanf( "%lld" , &b[i] );
		temp = b[0];
		for( i = 1 ; i < n ; i++ ) {
			temp = kgcd( b[i] , temp );
		}
		for( j = 0 ; j < n ; ++ j ) {
			a[j] = b[j] / temp;
		}
		temp /= sqrt( b[n] / a[0] / a[1] );
		for( i = 0 ; i < n ; ++i ) {
			a[i] = b[i] / temp;
		}
		printf( "%lld\n" , temp );
		sort( a , a + n );
		for( j = 0 ; j < n ; ++ j ) {
			if( j != n - 1 )
				printf( "%lld " , a[j] );
			else
				printf( "%lld\n" , a[j] ); 
		}
	}
	return 0;
}
```