#include <algorithm>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 1000
#define INF 100000
int d[N + 1][N + 1], m[N + 1][N + 1];
void optimal_polygon_triangulation(int n) {
for (int i = 1; i <= (n - 1); i++) d[i][i] = 0;
for (int s = 1; s <= (n - 2); s++) {
for (int i = 1; i <= (n - s - 1); i++) {
int j = i + s;
d[i][j] = INF;
for (int k = i; k <= j; k++) {
d[i][j] = min(d[i][j], d[i][k] + d[k + 1][j] + m[i][k + 1] + m[k + 1][j + 1] + m[j + 1][i]);
}
}
}
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> m[i][j];
}
}
optimal_polygon_triangulation(n);
cout << d[1][n-1] << endl;
return 0;
}