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

using namespace std;

int n, n2;
vector<vector<int>> result;

void dfs(vector<int> d, int idx, int sm, int mx, vector<int> temp, int num){
    temp.push_back(num);
    if (temp.size() == n){
        sort(temp.begin(), temp.end());
        vector<int> t;
        for (int i = 0; i < n; i++){
            for (int j = i + 1; j < n; j++){
                t.push_back(temp[j]-temp[i]);
            }
        }
        sort(t.begin(), t.end());
        bool bad = 1;
        for (int i = 0; i < n2; i++){
            if (d[i] != t[i]) {
                bad = 0;
                break;
            }
        }
        if (bad) result.push_back(temp);
        return;
    }

    int l = d[idx]-sm, r = mx-d[idx];
    for (int i = 0; i <= idx; i++){
        if (d[i] == l){
            dfs(d, idx-1, sm, mx, temp, l);
        }
        if (d[i] == r){
            dfs(d, idx-1, sm, mx, temp, r);
        }
    }
}

int main(){
    cin >> n;
    n2 = n*(n-1)/2;
    vector<int> d(n2);
    for (int i = 0; i < n2; i++){
        cin >> d[i];
    }
    int mx = d[n2-1];
    vector<int> temp = {0};
    dfs(d, n2-2, 0, mx, temp, mx);
    sort(result.begin(), result.end());
    // for (int i = 0; i < result.size(); i++){
    //     for (int j : result[i]) cout << j << " ";
    //     cout << "\n";
    // }
    for (int i : result[0]) cout << i << " ";
    cout << "\n";
    for (int i : result[result.size()-1]) cout << i << " ";
    return 0;
}