/*
 *       Author:  8mao
 * Created Time:  2014/3/16 13:46:42
 *    File Name:  1346.cpp
 */
# include<map>
# include<set>
# include<cmath>
# include<queue>
# include<stack>
# include<vector>
# include<string>
# include<cstdio>
# include<cstring>
# include<iostream>
# include<algorithm>
# include<functional>
using namespace std;

typedef pair<int,int> PII;
# define INF 1<<30
# define LL long long
# define MOD 1000000007
# define VI vector<int>
# define VLL vector<LL>
# define VS vector<string>
# define PII pair<int,int>

# define F first
# define S second
# define mp make_pair
# define pb push_back
# define lb lower_bound
# define up upper_bound
# define lowbit(x)(x&-x)
# define lson l,m,rt<<1
# define rson m+1,r,rt<<1|1
# define clr(x) (x).clear()
# define sz(x) ((int)(x).size())
# define all(x) (x).begin(),(x).end()
# define mem(x,y) memset(x,y,sizeof(x))
# define forall(it,c) for(typeof((c).begin())it=(c).begin();it!=(c).end();it++)

# define N 305
LL b[N][N], a[N];

LL gcd(LL a, LL b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}

LL calc(LL a, LL b, LL c)
{
    //printf ("%I64d %I64d %I64d\n", a, b, c);
    LL g = gcd(a, c);
    a /= g, c /= g;
    g = gcd(b, c);
    b /= g, c /= g;
    return (LL)sqrt(a * b * 1.0);
}

int main()
{
    //freopen("in.txt","r",stdin);
    int i, j, n;
    while (scanf ("%d", &n) != EOF && n) 
    {
        mem (a, 0);    
        for (i = 0; i < n; i++)
            for (j = i + 1; j <= n; j++)
                scanf ("%lld", &b[i][j]);
        a[0] = calc(b[0][1], b[0][2], b[1][2]);
        for (i = 1; i <= n; i++)
            a[i] = b[0][i] / a[0];
        printf ("%lld\n", a[0]);
        sort (a + 1, a + n + 1);
        for (i = 1; i <= n; i++)
            printf ("%lld%c", a[i], i == n ? '\n' : ' ');
    }
    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
/*
 *       Author:  8mao
 * Created Time:  2014/3/16 13:46:42
 *    File Name:  1346.cpp
 */
# include<map>
# include<set>
# include<cmath>
# include<queue>
# include<stack>
# include<vector>
# include<string>
# include<cstdio>
# include<cstring>
# include<iostream>
# include<algorithm>
# include<functional>
using namespace std;

typedef pair<int,int> PII;
# define INF 1<<30
# define LL long long
# define MOD 1000000007
# define VI vector<int>
# define VLL vector<LL>
# define VS vector<string>
# define PII pair<int,int>

# define F first
# define S second
# define mp make_pair
# define pb push_back
# define lb lower_bound
# define up upper_bound
# define lowbit(x)(x&-x)
# define lson l,m,rt<<1
# define rson m+1,r,rt<<1|1
# define clr(x) (x).clear()
# define sz(x) ((int)(x).size())
# define all(x) (x).begin(),(x).end()
# define mem(x,y) memset(x,y,sizeof(x))
# define forall(it,c) for(typeof((c).begin())it=(c).begin();it!=(c).end();it++)

# define N 305
LL b[N][N], a[N];

LL gcd(LL a, LL b)
{
    if (b == 0)
        return a;
    return gcd(b, a % b);
}

LL calc(LL a, LL b, LL c)
{
    //printf ("%I64d %I64d %I64d\n", a, b, c);
    LL g = gcd(a, c);
    a /= g, c /= g;
    g = gcd(b, c);
    b /= g, c /= g;
    return (LL)sqrt(a * b * 1.0);
}

int main()
{
    //freopen("in.txt","r",stdin);
    int i, j, n;
    while (scanf ("%d", &n) != EOF && n) 
    {
        mem (a, 0);    
        for (i = 0; i < n; i++)
            for (j = i + 1; j <= n; j++)
                scanf ("%lld", &b[i][j]);
        a[0] = calc(b[0][1], b[0][2], b[1][2]);
        for (i = 1; i <= n; i++)
            a[i] = b[0][i] / a[0];
        printf ("%lld\n", a[0]);
        sort (a + 1, a + n + 1);
        for (i = 1; i <= n; i++)
            printf ("%lld%c", a[i], i == n ? '\n' : ' ');
    }
    return 0;
}
```