#include <bits/stdc++.h>
#define endl '\n'

#define SZ(x) ((int)x.size())
#define ALL(V) V.begin(), V.end()
#define L_B lower_bound
#define U_B upper_bound
#define pb push_back
#pragma GCC optimize("O3")

using namespace std;
template<class T, class T1> int chkmin(T &x, const T1 &y) { return x > y ? x = y, 1 : 0; }
template<class T, class T1> int chkmax(T &x, const T1 &y) { return x < y ? x = y, 1 : 0; }
const int MAXN = 542;

int n, L, m;
int a[MAXN * MAXN];
int sorted[MAXN * MAXN];

int read_int();

void read()
{
    n = read_int();
    L = n * (n - 1) / 2;
    for(int i = 0; i < L; i++)
        a[i] = read_int();
}

int ini_cnt[MAXN * MAXN], cnt[MAXN * MAXN];
int ans[MAXN];

int get(int x)
{
    int j = L_B(sorted, sorted + m, x) - sorted;
    if(j == m || sorted[j] != x) return -1;
    return j;
}

bool check(int x)
{
    for(int i = 0; i < m; i++)
        cnt[i] = ini_cnt[i];

    ans[0] = x;
    
    int pos = 0;
    for(int i = 1; i < n; i++)
    {
        while(pos < L && cnt[get(a[pos])] == 0) pos++;
        
        if(pos == L) return false;
        ans[i] = a[pos] - x;
    
        for(int j = 0; j < i; j++)
        {
            int p = get(ans[i] + ans[j]);
            if(p == -1) return false;
            if(!cnt[p]) return false;
            cnt[p]--;
        }
    }

    return true;
}

void solve()
{
    m = 0;
    for(int i = 0; i < L; i++)
        if(m == 0 || a[i] != sorted[m - 1])
        {
            ini_cnt[m] = 1;
            sorted[m] = a[i]; 
            m++;
        }
        else
            ini_cnt[m - 1]++;

    int cnt = 0, frst = (int) 1e9;
    vector<int> cands;

    for(int i = 2; i < L; i++)
    {
        int x, ll;
        ll = a[i];
        x = a[0] + a[1] - ll;
        if(x > 0 && x % 2 == 0 && x / 2 <= a[0] / 2)
            cands.pb(x / 2);
    }

    sort(ALL(cands));
    cands.erase(unique(ALL(cands)), cands.end());

    for(int x: cands)
        if(check(x))
        {
            chkmin(frst, x);
            cnt++;            
        }

    check(frst);
    cout << cnt << endl;
    for(int i = 0; i < n; i++)
        cout << ans[i] << " ";
    cout << endl;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    read();
    solve();
    return 0;
}

int psb = 0;
char buff[MAXN];

void next_char() { if(++psb == MAXN) fread(buff, 1, MAXN, stdin), psb = 0; }

int read_int()
{
    int ret = 0;
    for(; buff[psb] < '0' || buff[psb] > '9'; next_char());
    for(; buff[psb] >= '0' && buff[psb] <= '9'; next_char())
        ret = ret * 10 + buff[psb] - '0';

    return ret;
}
