#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

long long gcd(unsigned long long int x, unsigned long long int y){
	return y == 0 ? x: gcd(y, x%y);
}

void solve()
{
	int n;
	while(cin >> n, n)
	{
		int size = (n + 1) * n / 2;
		vector<unsigned long long int> Vecodd;
		vector<unsigned long long int> Veceven;
		for(int i = 0; i < size; ++i)
		{
			unsigned long long int temp;
			cin >> temp;
			if(temp % 2 == 0)
			{
				Veceven.push_back(temp);
			}
			else
			{
				Vecodd.push_back(temp);
			}
		}
		sort(Veceven.begin(), Veceven.end());
		sort(Vecodd.begin(), Vecodd.end());
		unsigned long long int  minodd = Vecodd[0];
		unsigned long long int mineven[2] = {Veceven[0], Veceven[1]};
		unsigned long long int g = gcd(mineven[0], minodd);
		unsigned long long int Even = (unsigned long long int)sqrt((double)mineven[0] / g * (mineven[1] / (minodd / g)));
		cout << Even << endl;
		size = Veceven.size();
		for(int i = 0; i < size - 1; ++i)
		{
			cout << Veceven[i] / Even << " ";
		}
		cout << Veceven[size - 1] / Even << endl;
	}
}

int main()
{
	solve();
	return(0);
}
### Prompt

Develop a solution in Cpp to the problem described below:

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 <vector>
#include <algorithm>
#include <cmath>

using namespace std;

long long gcd(unsigned long long int x, unsigned long long int y){
	return y == 0 ? x: gcd(y, x%y);
}

void solve()
{
	int n;
	while(cin >> n, n)
	{
		int size = (n + 1) * n / 2;
		vector<unsigned long long int> Vecodd;
		vector<unsigned long long int> Veceven;
		for(int i = 0; i < size; ++i)
		{
			unsigned long long int temp;
			cin >> temp;
			if(temp % 2 == 0)
			{
				Veceven.push_back(temp);
			}
			else
			{
				Vecodd.push_back(temp);
			}
		}
		sort(Veceven.begin(), Veceven.end());
		sort(Vecodd.begin(), Vecodd.end());
		unsigned long long int  minodd = Vecodd[0];
		unsigned long long int mineven[2] = {Veceven[0], Veceven[1]};
		unsigned long long int g = gcd(mineven[0], minodd);
		unsigned long long int Even = (unsigned long long int)sqrt((double)mineven[0] / g * (mineven[1] / (minodd / g)));
		cout << Even << endl;
		size = Veceven.size();
		for(int i = 0; i < size - 1; ++i)
		{
			cout << Veceven[i] / Even << " ";
		}
		cout << Veceven[size - 1] / Even << endl;
	}
}

int main()
{
	solve();
	return(0);
}
```