#include<iostream>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
int n,m,ans;
int s[125000],a[505],ansA[505];
bool z[505][505];
int r[10][10];
bool checkIfLegit()
{
    a[0]=r[0][1]+r[0][2]-r[1][2];
    if (a[0]%2)
        return false;
    a[0]/=2;
    for (int i=1; i<n; i++)
    {
        a[i]=r[0][i]-a[0];
        if (a[i]<0)
            return false;
    }
    for (int i=1; i<n; i++)
        for (int j=i+1; j<n; j++)
            if (a[i]+a[j]!=r[i][j])
                return false;
    return true;
}
void solve (int pos)
{
//    cout<<pos<<'\n';
    if (pos>=m-2)
    {
//        for (int i=0; i<n; i++)
//        {
//            for (int j=0; j<n; j++)
//                cout<<r[i][j]<<' ';
//            cout<<'\n';
//        }
//        cout<<'\n';
        if (!checkIfLegit())
            return;
        if (ans==0)
            for (int i=0; i<n; i++)
                ansA[i]=a[i];
        ans++;
        return;
    }
    for (int i=0; i<n; i++)
        for (int j=i+1; j<n; j++)
            if (r[i][j]==0)
            {
                r[i][j]=s[pos];
                solve(pos+1);
                r[i][j]=0;
            }
}
void dumbSolve()
{
    r[0][1]=s[0];
    r[0][2]=s[1];
    r[n-2][n-1]=s[m-1];
    r[n-3][n-1]=s[m-2];
    solve(2);
    cout<<ans<<'\n';
    for (int i=0; i<n; i++)
        cout<<ansA[i]<<' ';
    cout<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n;
    m=n*(n-1)/2;
    for (int i=0; i<m; i++)
        cin>>s[i];

    if (n<=7)
    {
        dumbSolve();
        return 0;
    }


    bool found=false;
    for (int i=1; i<=s[0]/2; i++)
    {
//        cout<<i<<'\n';
        memset(z,0,sizeof(z));
        a[0]=i;
        a[1]=s[0]-i;
        a[2]=s[1]-i;
        z[0][1]=z[0][2]=true;
        int br=3;
        for (int j=2; j<m; j++)
        {
            bool flag=true;
            for (int k=0; k<br; k++)
            {
                if (!flag)
                    break;
                for (int l=k+1; l<br; l++)
                {
                    if (a[k]+a[l]>s[j])
                        break;
                    if (a[k]+a[l]<s[j])
                        continue;
                    if (z[k][l])
                        continue;
//                    cout<<j<<' '<<k<<' '<<l<<'\n';
                    z[k][l]=true;
//                    if (i==5)
//                    {
//                        for (int i1=0; i1<n; i1++)
//                        {
//                            for (int j1=0; j1<n; j1++)
//                                cout<<z[i1][j1]<<' ';
//                            cout<<'\n';
//                        }
//                        cout<<"\n\n";
//                    }
                    flag=false;
                    break;
                }
            }
            if (flag)
            {
//                for (int j=0; j<n; j++)
//                {
//                    for (int k=0; k<n; k++)
//                        cout<<z[j][k]<<' ';
//                    cout<<'\n';
//                }
                a[br]=s[j]-a[0];
                z[0][br]=true;
                br++;
//                cout<<"br="<<br<<'\n';
                if (br>n || a[br-1]<a[br-2])
                {
                    br=-1;
                    break;
                }

            }
        }
//        cout<<i<<' '<<br<<'\n';
        if (br!=n)
            continue;
        if (ans==0)
            for (int j=0; j<n; j++)
                ansA[j]=a[j];
        ans++;
//        for (int j=0; j<n; j++)
//            cout<<a[j]<<' ';
//        cout<<'\n';
    }
    cout<<ans<<'\n';
    for (int i=0; i<n-1; i++)
        cout<<ansA[i]<<' ';
    cout<<ansA[n-1]<<'\n';
    return 0;
}
