#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cerr.tie(0);
    int n,i,j,br,pom=0,x,y=0,mn=1000000000;
    string red;
    cin>>n;
    int m[n][n],t[n][n],dp[n][n];
    deque <pair <int, int> > predstoji;
    map <pair<int,int>, int> uradjen;
    uradjen[{0,0}]=1;
    for(i=0;i<n;i++)
    {
        cin>>red;
        for(j=0;j<n;j++)
        {
            m[i][j]=red[j]-48;
            if(m[i][j]==0)
            {
                predstoji.push_back({i,j});
            }
        }
    }
    if(m[0][0]==0)
    {
        y=1;
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>br;
            t[i][j]=br;
        }
    }
    if(m[0][0]==0 || m[1][1]==0)
    {
        for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==0 && j==0 && m[i][j]==1)
            {
                dp[i][j]=0;
            }
            else if(i==0 && j==0)
            {
                dp[i][j]=t[i][j];
            }
            else if(i==0)
            {
               dp[i][j]=dp[i][j-1]+t[i][j];
            }
            else if(j==0)
            {
                dp[i][j]=dp[i-1][j]+t[i][j];
            }
            else
            {
                if(dp[i-1][j]>dp[i][j-1])
                {
                    dp[i][j]=dp[i][j-1]+t[i][j];
                }
                else
                {
                    dp[i][j]=dp[i-1][j]+t[i][j];
                }
            }
        }
    }
    if(dp[n-1][n-1]<mn)
    {
        mn=dp[n-1][n-1];
    }
    }
    else
    {
        while(uradjen.size()!=n+1)
        {
            if(predstoji.size()>0)
            {
                x=predstoji.size();
                while(x>0)
                {
                if(predstoji[0].first!=0)
                {
                    uradjen[{predstoji[0].first,predstoji[0].second}]=1;
                    if(!uradjen.count({predstoji[0].first-1, predstoji[0].second}))
                    {
                        if(m[predstoji[0].first-1][predstoji[0].second]==1)
                        {
                            m[predstoji[0].first-1][predstoji[0].second]=0;
                            predstoji.push_back({predstoji[0].first-1, predstoji[0].second});
                        }
                        else if(!uradjen[{predstoji[0].first-1, predstoji[0].second}])
                        {
                            predstoji.push_back({predstoji[0].first-1, predstoji[0].second});
                        }
                    }
                }
                if(predstoji[0].first!=n-1)
                {
                    uradjen[{predstoji[0].first,predstoji[0].second}]=1;
                    if(!uradjen.count({predstoji[0].first+1, predstoji[0].second}))
                    {
                        if(m[predstoji[0].first+1][predstoji[0].second]==1)
                        {
                            m[predstoji[0].first+1][predstoji[0].second]=0;
                            predstoji.push_back({predstoji[0].first+1, predstoji[0].second});
                        }
                        else
                        {
                            predstoji.push_back({predstoji[0].first+1, predstoji[0].second});
                        }
                    }
                }
                if(predstoji[0].second!=0)
                {
                    uradjen[{predstoji[0].first,predstoji[0].second}]=1;
                    if(!uradjen.count({predstoji[0].first, predstoji[0].second-1}))
                    {
                        if(m[predstoji[0].first][predstoji[0].second-1]==1)
                        {
                            m[predstoji[0].first][predstoji[0].second-1]=0;
                            predstoji.push_back({predstoji[0].first, predstoji[0].second-1});
                        }
                        else
                        {
                            predstoji.push_back({predstoji[0].first, predstoji[0].second-1});
                        }
                    }
                }
                if(predstoji[0].second!=n-1)
                {
                    uradjen[{predstoji[0].first,predstoji[0].second}]=1;
                    if(!uradjen.count({predstoji[0].first, predstoji[0].second+1}))
                    {
                        if(m[predstoji[0].first][predstoji[0].second+1]==1)
                        {
                            m[predstoji[0].first][predstoji[0].second+1]=0;
                            predstoji.push_back({predstoji[0].first, predstoji[0].second+1});
                        }
                        else
                        {
                            predstoji.push_back({predstoji[0].first, predstoji[0].second+1});
                        }
                    }
                }
                x--;
                predstoji.pop_front();
                }
            }
            for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==0 && j==0)
            {
                dp[i][j]=y*t[i][j];
            }
            else if(i==0)
            {
                dp[i][j]=abs(m[i][j]-1)*t[i][j]+dp[i][j-1];
            }
            else if(j==0)
            {
                dp[i][j]=abs(m[i][j]-1)*t[i][j]+dp[i-1][j];
            }
            else
            {
                if(dp[i-1][j]>dp[i][j-1])
                {
                    dp[i][j]=dp[i][j-1]+abs(m[i][j]-1)*t[i][j];
                }
                else
                {
                    dp[i][j]=dp[i-1][j]+abs(m[i][j]-1)*t[i][j];
                }
            }
        }
    }
    if(dp[n-1][n-1]<mn)
    {
        mn=dp[n-1][n-1];
    }
        }
    }
    cout<<mn;
    return 0;
}