/* 
 * File:   main.cpp
 * Author: administrator
 *
 * Created on 2011å¹´8æ20æ¥, ä¸å4:32
 */

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <math.h>
#define M 100000
using namespace std;
long long even[M];
long long odd[M];

/*
 * 
 */
long long gcd(long long n, long long m) {
    while (m) {
        long long t = n % m;
        n = m;
        m = t;
    }
    return n;
}

int main(int argc, char** argv) {
    int n, i, j;
    long long x, A, a, B;
    while (scanf("%d", &n), n) {
        int cnte = 0, cnto = 0;
        n = n * (n + 1) / 2;
        for (i = 0; i < n; i++) {
            scanf("%lld", &x);
            if (x % 2 == 1)odd[cnto++] = x;
            else even[cnte++] = x;
        }
        sort(even, even + cnte);
        sort(odd, odd + cnto);
        long long g;
        A = even[cnte - 1];
        a = even[cnte - 2];
        B = odd[cnto - 1];
        g = gcd(A, B);
        A /= g, B /= g;
        a /= B;
        g = A*a;
        g = (long long) sqrt(g * 1.0);
        cout << g << endl;
        for (i = 0; i < cnte - 1; i++)
            cout << even[i] / g << " ";
        cout << even[i] / g << 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
/* 
 * File:   main.cpp
 * Author: administrator
 *
 * Created on 2011å¹´8æ20æ¥, ä¸å4:32
 */

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <map>
#include <set>
#include <math.h>
#define M 100000
using namespace std;
long long even[M];
long long odd[M];

/*
 * 
 */
long long gcd(long long n, long long m) {
    while (m) {
        long long t = n % m;
        n = m;
        m = t;
    }
    return n;
}

int main(int argc, char** argv) {
    int n, i, j;
    long long x, A, a, B;
    while (scanf("%d", &n), n) {
        int cnte = 0, cnto = 0;
        n = n * (n + 1) / 2;
        for (i = 0; i < n; i++) {
            scanf("%lld", &x);
            if (x % 2 == 1)odd[cnto++] = x;
            else even[cnte++] = x;
        }
        sort(even, even + cnte);
        sort(odd, odd + cnto);
        long long g;
        A = even[cnte - 1];
        a = even[cnte - 2];
        B = odd[cnto - 1];
        g = gcd(A, B);
        A /= g, B /= g;
        a /= B;
        g = A*a;
        g = (long long) sqrt(g * 1.0);
        cout << g << endl;
        for (i = 0; i < cnte - 1; i++)
            cout << even[i] / g << " ";
        cout << even[i] / g << endl;
    }
    return 0;
}
```