#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <list>
#include <map>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
long long gcd(long long a,long long b)
{
	if(a==0)return b;
	return gcd(b%a,a);
}
long long m,n, mn;
long long s[1266],ind,gd;
int main()
{
	while(cin>>n&&n)
	{
		m=(n+1)*n/2;
		long long mn=1;
		mn<<=62;
		ind=0;
		for(int i=0;i<m;i++)
		{
			long long z;
			scanf("%lld",&z);
			if(z%2==0)
				s[ind++]=z;
			else mn=min(mn,z);
		}
		sort(s,s+ind);
		if(ind!=n)while(1);
		long long gd=gcd(s[0],s[1]);
		//mn/=s[0]/gd;
		//mn/=s[1]/gd;
		//long long	da=gd/mn;
		long long da=sqrt(1.0*s[0]*s[1]/mn)+0.5;

		cout<<da<<endl;
		//if(da==0)continue;
		for(int i=0;i<n;i++)
		{
			if(i)cout<<' ';
			cout<<s[i]/da;
		}cout<<endl;
	}
}
### Prompt

Please create a solution in Cpp to 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 <stdio.h>
#include <string.h>
#include <string>
#include <list>
#include <map>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
long long gcd(long long a,long long b)
{
	if(a==0)return b;
	return gcd(b%a,a);
}
long long m,n, mn;
long long s[1266],ind,gd;
int main()
{
	while(cin>>n&&n)
	{
		m=(n+1)*n/2;
		long long mn=1;
		mn<<=62;
		ind=0;
		for(int i=0;i<m;i++)
		{
			long long z;
			scanf("%lld",&z);
			if(z%2==0)
				s[ind++]=z;
			else mn=min(mn,z);
		}
		sort(s,s+ind);
		if(ind!=n)while(1);
		long long gd=gcd(s[0],s[1]);
		//mn/=s[0]/gd;
		//mn/=s[1]/gd;
		//long long	da=gd/mn;
		long long da=sqrt(1.0*s[0]*s[1]/mn)+0.5;

		cout<<da<<endl;
		//if(da==0)continue;
		for(int i=0;i<n;i++)
		{
			if(i)cout<<' ';
			cout<<s[i]/da;
		}cout<<endl;
	}
}
```