#include using namespace std; int main() { int n; cin >> n; int x[n] = {}; for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { int xx; cin >> xx; x[i] |= (xx << j); } } int a[n]; for(int i = 0; i < n; ++i) cin >> a[i]; int ans = 1e9; for(int mask = 0; mask < (1 << n); ++mask) { int tmp = 0; for(int i = 0; i < n; ++i) { if((mask >> i) & 1) tmp += a[i]; } if(ans <= tmp) continue; int msk = mask; while(true) { bool update = false; for(int i = 0; i < n; ++i) { if((x[i] & msk) == x[i]) { if(not (msk >> i & 1)) { update = true; msk |= (1 << i); } } } if(not update) break; } if(msk == ((1 << n) - 1)) { ans = tmp; } } cout << ans << endl; return 0; }