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

using namespace std;

int n, m, st[401];
int use[401];
vector<int> data, tmp;
vector<vector<int> > res;

void init(){
  fill(st, st+401, false);
  data.clear();
  tmp.clear();
  res.clear();
}

void calc(int p, int len){
  if(p == n){
    res.push_back(tmp);
    return;
  }
  while(len > 0 && !st[len]) len--;
  if(len == 0) return;
  
  int val = len;
  for(int k=0;k<2;k++){
    bool f = true;
    for(int i=0;i<tmp.size();i++){
      if(--st[abs(tmp[i]-len)] < 0) f = false;
    }
    if(f){
      tmp.push_back(len);
      calc(p+1, val);
      tmp.pop_back();
    }
    for(int i=0;i<tmp.size();i++){
      st[abs(tmp[i]-len)]++;
    }
    len = data[0] - len;
  }
}

int main(){
  while(cin >> n && n){
    m = n * (n - 1) / 2;
    init();
    for(int i=0;i<m;i++){
      int in;
      cin >> in;
      data.push_back(in);
      st[in]++;
    }
    if(m > 1){
      st[data[0]]--;
      tmp.push_back(0);
      tmp.push_back(data[0]);
      calc(2, data[0]);
      vector<vector<int > > ans;
      for(int i=0;i<res.size();i++){
        sort(res[i].begin(), res[i].end());
        vector<int> vec;
        for(int j=1;j<res[i].size();j++) vec.push_back(res[i][j] - res[i][j-1]);
        ans.push_back(vec);
        reverse(vec.begin(), vec.end());
        ans.push_back(vec);
      }
      sort(ans.begin(), ans.end());
      ans.erase(unique(ans.begin(), ans.end()), ans.end());
      for(int i=0;i<ans.size();i++){
        for(int j=0;j<ans[i].size();j++){
          if(j) cout << " ";
          cout << ans[i][j];
        }
        cout << endl;
      }
    }else{
      cout << data[0] << endl;
    }
    cout << "-----" << endl;
  }
}