#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<utility>
#include<numeric>
#include<algorithm>
#include<bitset>
#include<complex>
#include<stack>

using namespace std;

typedef long long Int;
typedef vector<int> vint;
typedef pair<int,int> pint;
typedef vector<string> vstring;
typedef vector<pint> vpint;

struct Edge{int to,from,cost;};

#ifdef DEBUG
#define debug cout
#else
stringstream __ss__;
#define debug __ss__
#endif

template<class T> void pv(T a, T b) { for (T i = a; i != b; ++i) debug << *i << " "; debug << endl; }
template<class T> void chmin(T &t, T f) { if (t > f) t = f; }
template<class T> void chmax(T &t, T f) { if (t < f) t = f; }
int in() { int x; scanf("%d", &x); return x; }

#define rep(i,n) for(int i=0;i<(n);++i)
#define repd(i,n) for(int i=(n)-1;i>=0;i--)
#define repn(i,m,n) for(int i=(m);i<=(n);++i)
#define repnd(i,m,n) for(int i=(n)-1;i>=(m);i--)
#define rep0(i,n) for(i=0;i<(n);++i)
#define all(n) n.begin(),n.end()
#define sz(n) ((int)(n).size())
#define IL for(;;)
#define MP make_pair
#define PB push_back
#define SS stringstream
#define X second
#define Y first
#define PUTLINE debug<<"LINE:"<<__LINE__<<endl;

const int INF = 2147483647/3;
const double EPS = 1e-10;
const double PI = acos(-1.0);

const int dx[]={1,-1,0,0,1,-1,1,-1,0};
const int dy[]={0,0,1,-1,1,-1,-1,1,0};

Int a[1000000];

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

Int sqrt(Int x,Int m,Int n){
	if(m+1==n)return m;
	Int l=(m+n)/2;
	if(x>=l*l)return sqrt(x,l,n);
	else return sqrt(x,m,l);
}

int main() {
	int n;
	IL{
		cin>>n;
		if(n==0)break;
		n=n*(n+1)/2;
		rep(i,n)cin>>a[i];
		sort(a,a+n);
		Int x=-1,y=-1,z=-1;
		rep(i,n){
			if(a[i]%2==0){
				if(x<0)x=a[i];
				else if(y<0)y=a[i];
			}else if(z<0){
				z=a[i];
			}
		}
//cout<<x<<" "<<y<<" "<<z<<endl;
		Int g=gcd(x,z);
		x/=g;
		z/=g;
		y/=z;
		Int w=x*y;
		w=sqrt(w,0,1LL<<31);
		cout<<w<<endl;
		bool first=true;
		rep(i,n){
			if(a[i]%2==0){
				if(!first)cout<<" ";
				first=false;
				cout<<a[i]/w;
			}
		}
		cout<<endl;
	}
	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<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<utility>
#include<numeric>
#include<algorithm>
#include<bitset>
#include<complex>
#include<stack>

using namespace std;

typedef long long Int;
typedef vector<int> vint;
typedef pair<int,int> pint;
typedef vector<string> vstring;
typedef vector<pint> vpint;

struct Edge{int to,from,cost;};

#ifdef DEBUG
#define debug cout
#else
stringstream __ss__;
#define debug __ss__
#endif

template<class T> void pv(T a, T b) { for (T i = a; i != b; ++i) debug << *i << " "; debug << endl; }
template<class T> void chmin(T &t, T f) { if (t > f) t = f; }
template<class T> void chmax(T &t, T f) { if (t < f) t = f; }
int in() { int x; scanf("%d", &x); return x; }

#define rep(i,n) for(int i=0;i<(n);++i)
#define repd(i,n) for(int i=(n)-1;i>=0;i--)
#define repn(i,m,n) for(int i=(m);i<=(n);++i)
#define repnd(i,m,n) for(int i=(n)-1;i>=(m);i--)
#define rep0(i,n) for(i=0;i<(n);++i)
#define all(n) n.begin(),n.end()
#define sz(n) ((int)(n).size())
#define IL for(;;)
#define MP make_pair
#define PB push_back
#define SS stringstream
#define X second
#define Y first
#define PUTLINE debug<<"LINE:"<<__LINE__<<endl;

const int INF = 2147483647/3;
const double EPS = 1e-10;
const double PI = acos(-1.0);

const int dx[]={1,-1,0,0,1,-1,1,-1,0};
const int dy[]={0,0,1,-1,1,-1,-1,1,0};

Int a[1000000];

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

Int sqrt(Int x,Int m,Int n){
	if(m+1==n)return m;
	Int l=(m+n)/2;
	if(x>=l*l)return sqrt(x,l,n);
	else return sqrt(x,m,l);
}

int main() {
	int n;
	IL{
		cin>>n;
		if(n==0)break;
		n=n*(n+1)/2;
		rep(i,n)cin>>a[i];
		sort(a,a+n);
		Int x=-1,y=-1,z=-1;
		rep(i,n){
			if(a[i]%2==0){
				if(x<0)x=a[i];
				else if(y<0)y=a[i];
			}else if(z<0){
				z=a[i];
			}
		}
//cout<<x<<" "<<y<<" "<<z<<endl;
		Int g=gcd(x,z);
		x/=g;
		z/=g;
		y/=z;
		Int w=x*y;
		w=sqrt(w,0,1LL<<31);
		cout<<w<<endl;
		bool first=true;
		rep(i,n){
			if(a[i]%2==0){
				if(!first)cout<<" ";
				first=false;
				cout<<a[i]/w;
			}
		}
		cout<<endl;
	}
	return 0;
}
```