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

using namespace std;

#define ll long long

ll gcd(ll a ,ll b){
    return b==0?a:gcd(b,a%b);
}

int main(void){
    int n;
    ll evens[251];
    ll odds[251*250/2];
    while(cin >> n && n){
        //ll evens[n];
        //ll odds[n*(n-1)/2];
        ll g,tmp;
        ll oindex=0, eindex=0;
        for(int i=0;i<n*(n+1)/2;i++){
            cin >> tmp;
            tmp%2?odds[oindex++] = tmp:evens[eindex++] = tmp;
        }
        sort(evens, evens+n);
        sort(odds, odds + n * (n-1)/2);
        tmp = gcd(evens[0], odds[0]);
        g = (ll)sqrt(evens[0] / tmp * (evens[1] / (odds[0] / tmp)));
        cout << g << endl;
        for(int i=0;i<n-1;i++){
            cout << (ll)round((double)evens[i]/g) << " ";
        }
        cout << (ll)round((double)evens[n-1]/g) << endl;
    }
}
### Prompt

Your challenge is to write 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 <algorithm>
#include <cmath>

using namespace std;

#define ll long long

ll gcd(ll a ,ll b){
    return b==0?a:gcd(b,a%b);
}

int main(void){
    int n;
    ll evens[251];
    ll odds[251*250/2];
    while(cin >> n && n){
        //ll evens[n];
        //ll odds[n*(n-1)/2];
        ll g,tmp;
        ll oindex=0, eindex=0;
        for(int i=0;i<n*(n+1)/2;i++){
            cin >> tmp;
            tmp%2?odds[oindex++] = tmp:evens[eindex++] = tmp;
        }
        sort(evens, evens+n);
        sort(odds, odds + n * (n-1)/2);
        tmp = gcd(evens[0], odds[0]);
        g = (ll)sqrt(evens[0] / tmp * (evens[1] / (odds[0] / tmp)));
        cout << g << endl;
        for(int i=0;i<n-1;i++){
            cout << (ll)round((double)evens[i]/g) << " ";
        }
        cout << (ll)round((double)evens[n-1]/g) << endl;
    }
}
```