#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
#define M 100005
LL gcd(LL a, LL b) {
	return a==0?b:gcd(b%a,a);
}
LL n,a[M],b[M],c[M],t;
int main() {
	while(scanf("%lld", &n)!=EOF){
		if(!n)break;
		int x=0,y=0,m=n*(n+1)/2;
		for(int i=0;i<m;i++){
			scanf("%lld",&t);
			if(t&1)a[x++]=t;
			else b[y++]=t;
		}
		sort(a,a+x);
		sort(b,b+y);
		LL tmp[2]={b[0],b[1]};
		for(int i=0;i<2;i++){
			LL res=gcd(a[0],tmp[i]);
			tmp[i]/=res;
			a[0]/=res;
		}
		LL res=(LL)sqrt(1.0*tmp[0]*tmp[1]);
		printf("%lld\n", res);
		for(int i=0;i<y-1;i++)
			printf("%lld ",b[i]/res);
		printf("%lld\n",b[y-1]/res);
	}
	return 0;
}
### Prompt

Please formulate 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<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
#define M 100005
LL gcd(LL a, LL b) {
	return a==0?b:gcd(b%a,a);
}
LL n,a[M],b[M],c[M],t;
int main() {
	while(scanf("%lld", &n)!=EOF){
		if(!n)break;
		int x=0,y=0,m=n*(n+1)/2;
		for(int i=0;i<m;i++){
			scanf("%lld",&t);
			if(t&1)a[x++]=t;
			else b[y++]=t;
		}
		sort(a,a+x);
		sort(b,b+y);
		LL tmp[2]={b[0],b[1]};
		for(int i=0;i<2;i++){
			LL res=gcd(a[0],tmp[i]);
			tmp[i]/=res;
			a[0]/=res;
		}
		LL res=(LL)sqrt(1.0*tmp[0]*tmp[1]);
		printf("%lld\n", res);
		for(int i=0;i<y-1;i++)
			printf("%lld ",b[i]/res);
		printf("%lld\n",b[y-1]/res);
	}
	return 0;
}
```