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

using namespace std;

typedef long long LL;


LL gcd(LL x, LL y){
  if(y == 0) return x;
  return gcd(y, x%y);
}

int main(){
  LL N;
  while(cin>>N,N){
	const int NB = N * (N+1) /2;
	vector<LL> bs(NB);
	for(int i=0;i<NB;++i) cin >> bs[i];
	LL even = 0;
	for(int i=0;i<N;++i){
	  even = gcd(bs[i], even);
	}
	vector<LL> as(N);
	for(int i=0;i<N;++i)
	  as[i] = bs[i] / even;

	int idx = N;
	for(int i=0;i<N;++i){
	  for(int j=i+1;j<N;++j){
		if(as[i] * as[j] != bs[idx]){
		  LL lf = bs[idx] / as[i] / as[j];
		  //		  cout<<"!"<<i<<","<<j<<"->"<<lf<<endl;
		  lf = sqrt(lf);
		  even /= lf;
		  for(int k=0;k<N;++k)
			as[k] = bs[k] / even;
		}
		++idx;
	  }
	}
	
	cout << even << endl;
	sort(as.begin(), as.end());
	cout << as[0];
	for(int i=1;i<N;++i) cout << " " << as[i];
	cout << endl;
  }
  
  return 0;
}
### Prompt

Generate a CPP solution 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 <vector>
#include <cassert>
#include <algorithm>
#include <cmath>

using namespace std;

typedef long long LL;


LL gcd(LL x, LL y){
  if(y == 0) return x;
  return gcd(y, x%y);
}

int main(){
  LL N;
  while(cin>>N,N){
	const int NB = N * (N+1) /2;
	vector<LL> bs(NB);
	for(int i=0;i<NB;++i) cin >> bs[i];
	LL even = 0;
	for(int i=0;i<N;++i){
	  even = gcd(bs[i], even);
	}
	vector<LL> as(N);
	for(int i=0;i<N;++i)
	  as[i] = bs[i] / even;

	int idx = N;
	for(int i=0;i<N;++i){
	  for(int j=i+1;j<N;++j){
		if(as[i] * as[j] != bs[idx]){
		  LL lf = bs[idx] / as[i] / as[j];
		  //		  cout<<"!"<<i<<","<<j<<"->"<<lf<<endl;
		  lf = sqrt(lf);
		  even /= lf;
		  for(int k=0;k<N;++k)
			as[k] = bs[k] / even;
		}
		++idx;
	  }
	}
	
	cout << even << endl;
	sort(as.begin(), as.end());
	cout << as[0];
	for(int i=1;i<N;++i) cout << " " << as[i];
	cout << endl;
  }
  
  return 0;
}
```