#include <bits/stdc++.h>
using namespace std;
int mat[1010][1010], n, dp[1010][1010];
char mat1[1010][1010];
void ispis(){
    for(int i = 1; i<=n; i++){
        for(int j = 1; j<=n; j++){
            cout << dp[i][j] << " ";
        }
        cout << endl;
    }
}
int main(){
    cin >> n;
    memset(dp, 127, sizeof(dp));
    for(int i = 1; i<=n; i++){
        for(int j = 1; j<=n; j++){
            cin >> mat1[i][j];
        }
    }
    for(int i = 1; i<=n; i++){
        for(int j = 1; j<=n; j++){
            cin >> mat[i][j];
        }
    }
    for(int i = 1; i<=n; i++){
        for(int j = 1; j<=n; j++){
            dp[i][j] = mat[i][j]+min(dp[i-1][j], dp[i][j-1]);
        }
    }
    cout << dp[n][n] << endl;
    ispis();
    return 0;
}