#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
 
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;
 
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;
 
typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;
 
#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define trav(a,x) for (auto& a : x)
 
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template<class T> bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001; //check the limits, dummy

vector<vl> solve(vector<pair<pl, pl> > pts) {
    vector<vl> res(1 << sz(pts));
    vpl A;
    vl ans(sz(pts) + 1);
    vl cur(sz(pts));
    F0R(curSet, (1 << sz(pts))) {
        F0R(i, sz(pts)) if (curSet & (1 << i)) A.pb({pts[i].f.f, pts[i].s.f});
        F0R(i, sz(A) + 1) ans[i] = 1e18;
        FOR(i, sz(A) + 1, sz(pts) + 1) ans[i] = 0;
        F0R(m, (1 << sz(A))) {
            F0R(i, sz(A)) cur[i] = abs(A[i].f) * A[i].s;
            ll lst = -20001;
            F0R(i, sz(A)) {
                if (m & (1 << i)) lst = A[i].f;
                ckmin(cur[i], (A[i].f - lst) * A[i].s);
            }
            lst = 20001;
            F0Rd(i, sz(A)) {
                if (m & (1 << i)) lst = A[i].f;
                ckmin(cur[i], (lst - A[i].f) * A[i].s);
            }
            ll curRes = 0; F0R(i, sz(A)) curRes += cur[i];
            ckmin(ans[__builtin_popcount(m)], curRes);

        }
        int cnt = 0;
        F0R(i, sz(pts)) {
            if (curSet & (1 << i)) cnt += 1 << pts[i].s.s;
        }
        res[cnt] = ans;
        A.clear();
    }
    return res;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);    
	
    int N; cin >> N;
    vector<pair<pl, pl> > pts(N);
    F0R(i, N) cin >> pts[i].f.f >> pts[i].f.s >> pts[i].s.f;
    F0R(i, N) pts[i].s.s = i;
    sort(all(pts));
    vector<vl> L = solve(pts);

    F0R(i, N) swap(pts[i].f.f, pts[i].f.s);
    sort(all(pts));
    vector<vl> R = solve(pts);
    ll ans[N+1]; F0R(i, N+1) ans[i] = 1e18;
    F0R(m, 1<<N) {
        F0R(i, N+1) {
            F0R(j, N+1) {
                if (i+j > N) continue;
                ckmin(ans[i+j], L[m][i] + R[(1<<N)-m-1][j]);
                if (ans[i+j] == 13000 && i+j == 0) {
//                    cout << "Found " << m << nl;
//                    cout << L[m][0] << " " << R[(1<<N)-m-1][0] << nl;
                }
            }
        }
    }
    F0R(i, N+1) {
        cout << ans[i] << nl;
    }
	return 0;
}
 
// read the question correctly (ll vs int)
// template by bqi343



Measured memory_bytes: 13972