#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <cassert>
#include <queue>
#include <set>
#include <map>
#include <valarray>
#include <bitset>
#include <stack>
using namespace std;

#define REP(i,n) for(int i=0;i<(int)n;++i)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(), (c).end()
const int INF = 1<<29;

vector<int> v;
int n, N;
typedef multiset<int> msi;
typedef msi::iterator msii;
set<vector<int> > ans;

void solve(msi ms, vector<int> pos);

void solve2(msi ms, vector<int> pos, int now) {
  msi tmpms(ms);
  bool dame = 0;
  REP(i, pos.size()) {
    msii jt = tmpms.find(abs(pos[i]-now));
    if (jt == tmpms.end()) {
      dame = 1;
      break;
    }
    tmpms.erase(jt);
  }
  if (!dame) {
    vector<int> npos(pos);
    npos.push_back(now);
    sort(ALL(npos));
    solve(tmpms, npos);
  }
}

void solve(msi ms, vector<int> pos) {
  if (ms.size() == 0) {
    vector<int> v;
    REP(i, pos.size()-1)
      v.push_back(pos[i+1]-pos[i]);
    ans.insert(v);
    return;
  }
  msii it = ms.end();it--;
  solve2(ms, pos, pos[pos.size()-1]-*it);
  solve2(ms, pos, *it);
}

int main() {
  while(cin>>n,n) {
    N = n*(n-1)/2;
    multiset<int> ms;
    ms.clear();
    int a[N];
    REP(i,N) {
      cin >> a[i];
      if (i)
        ms.insert(a[i]);
    }
    vector<int> pos;
    pos.push_back(0);
    pos.push_back(a[0]);
    ans.clear();
    solve(ms, pos);
    FOR(it, ans) {
      FOR(jt, *it) {
        if (jt!=it->begin()) cout << " ";
        cout << *jt;
      }
      cout << endl;
    }
    
    cout << "-----" << endl;
  }
}