← Home
# include <algorithm>
# include <iostream>
# include <vector>
 
using std::cin;
using std::cout;
using std::vector;
 
constexpr long long inf = 0x3f3f3f3f3f3f3f3f;
 
int n;
vector<vector<long long>> graph;
 
void dijkstra(int s, vector<long long> &dis) {
    for (int u = 0; u < n; ++u) {
        dis[u] = graph[s][u];
        for (int v = 0; v < n; ++v) {
            if (v == s || v == u) {
                continue;
            }
            
            dis[u] = std::min(dis[u], 0ll + std::min(graph[s][v], graph[v][u]) + graph[v][u]);
        }
    }
 
    vector<long long> ds = dis;
 
    for (int _ = 0; _ < n; ++_) {
        int u = std::min_element(ds.begin(), ds.end()) - ds.begin();
 
        for (int v = 0; v < n; ++v) {
            if (dis[v] > dis[u] + graph[u][v]) {
                ds[v] = dis[v] = dis[u] + graph[u][v];
            }
        }
 
        ds[u] = inf;
    }
}
 
int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
 
    cin >> n;
 
    graph.resize(n, vector<long long>(n, 0));
 
    long long mn_len = 0x3f3f3f3f3f3f3f3f;
    int mn_u = -1, mn_v = -1;
 
    for (int i = 0; i < n; ++i) {
        for (int j = 1; i + j < n; ++j) {
            int w;
            cin >> w;
 
            int u = i, v = i + j;
            graph[u][v] = graph[v][u] = w;
 
            if (w < mn_len) {
                mn_u = u;
                mn_v = v;
                mn_len = w;
            }
        }
    }
 
    for (int u = 0; u < n; ++u) {
        for (int v = u + 1; v < n; ++v) {
            if (u == mn_u && v == mn_v) {
                graph[u][v] = graph[v][u] = 0x3f3f3f3f3f3f3f3f;
            } else {
                graph[u][v] -= mn_len;
                graph[v][u] -= mn_len;
            }
        }
    }
 
    vector<long long> dis_u(n, inf), dis_v(n, inf);
 
    dijkstra(mn_u, dis_u);
    dijkstra(mn_v, dis_v);
 
    for (int rt = 0; rt < n; ++rt) {
        cout << (n - 1) * mn_len + std::min(dis_u[rt], dis_v[rt]) << "\n";
    }
 
    return 0;
}