#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    vector<vector<bool>> b(n,vector<bool>(n,true));
    vector<vector<int>> a(n,vector<int>(n)), dp(n,vector<int>(n));
    vector<int> ip, jp;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            char c;
            cin>>c;
            if(c=='0')
            {
                b[i][j]=false;
                ip.push_back(i);
                jp.push_back(j);
            }
        }
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            for(int k=0;k<ip.size() && b[i][j];k++)
                if(i+j>=abs(ip[k]-i)+abs(jp[k]-j))
                    b[i][j]=false;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            cin>>a[i][j];
    dp[0][0]=a[0][0];
    for(int i=1;i<n;i++)
    {
        dp[i][0]=dp[i-1][0]+a[i][0];
        dp[0][i]=dp[0][i-1]+a[0][i];
    }
    for(int i=1;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            dp[i][j]=min(dp[i-1][j],dp[i][j-1]);
            if(!b[i][j])
                dp[i][j]+=a[i][j];
        }
    }
    cout<<dp[n-1][n-1];
    return 0;
}