#include <bits/stdc++.h>
using namespace std;

int n, suma1, suma2, res;
char mat[1005][1005];
int otrov[1005][1005];
void dfs1(int x, int y){

    if(x > 1 && y > 1){
        if(otrov[x-1][y] > otrov[x][y-1]){
            suma1 += otrov[x][y-1];
            dfs1(x, y-1);
        }
        else{
            suma1 += otrov[x-1][y];
            dfs1(x-1, y);
        }

    }
    else if(x > 1 && y == 1){
        suma1 += otrov[x-1][y];
        dfs1(x-1, y);
    }
    else if(x == 1 && y > 1){
        suma1 += otrov[x][y-1];
        dfs1(x, y-1);
    }
    return;

}
void dfs2(int x, int y){

    if(x < n && y < n){
        if(otrov[x+1][y] > otrov[x][y+1]){
            suma2 += otrov[x][y+1];
            dfs2(x, y+1);
        }
        else{
            suma2 += otrov[x+1][y];
            dfs2(x+1, y);
        }

    }
    else if(x < n && y == n){
        suma2 += otrov[x+1][y];
        dfs2(x+1, y);
    }
    else if(x == n && y < n){
        suma2 += otrov[x][y+1];
        dfs2(x, y+1);
    }
    return;

}
int main(){

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n;

    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++){
            cin >> otrov[i][j];
        }
    }
    suma1 += otrov[n][n];
    suma2 += otrov[1][1];
    dfs1(n, n);
    dfs2(1, 1);
    res = min(suma1, suma2);
    //cout << suma1 << " " << suma2 << '\n';
    cout << res << '\n';

    return 0;
}