#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <string>
#include <string.h>

using namespace std;
#define maxn  255

long long a[maxn * maxn];
long long b[maxn * maxn];
long long c[maxn * maxn];

int main() {
	int n;
	while(~scanf("%d",&n),n) {
		int m = n * (n + 1) / 2;
		int t1 = 0;
		int t2 = 0;
		for(int i = 0; i < m; i ++) {
			scanf("%lld", &a[i]);
			if(a[i] % 2 == 1)
				b[t1++] = a[i];
			else
				c[t2++] = a[i];
		}
		sort(b, b + t1);
		sort(c, c + t2);
		double x = (c[0] * 1.0) / b[0] * c[1];
		long long ans = (long long)(sqrt(x) + 0.001); 
		printf("%lld\n",ans);
		for(int i = 0; i < n; i ++) {
			if (i == n - 1)
				printf("%lld\n",c[i] / ans);
			else 
				printf("%lld ",c[i] / ans);
		}
	}
	return 0;
}
### 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 <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <map>
#include <string>
#include <string.h>

using namespace std;
#define maxn  255

long long a[maxn * maxn];
long long b[maxn * maxn];
long long c[maxn * maxn];

int main() {
	int n;
	while(~scanf("%d",&n),n) {
		int m = n * (n + 1) / 2;
		int t1 = 0;
		int t2 = 0;
		for(int i = 0; i < m; i ++) {
			scanf("%lld", &a[i]);
			if(a[i] % 2 == 1)
				b[t1++] = a[i];
			else
				c[t2++] = a[i];
		}
		sort(b, b + t1);
		sort(c, c + t2);
		double x = (c[0] * 1.0) / b[0] * c[1];
		long long ans = (long long)(sqrt(x) + 0.001); 
		printf("%lld\n",ans);
		for(int i = 0; i < n; i ++) {
			if (i == n - 1)
				printf("%lld\n",c[i] / ans);
			else 
				printf("%lld ",c[i] / ans);
		}
	}
	return 0;
}
```