#include <bits/stdc++.h>
using namespace std;
#define int long long
const long long INF = 1e18;
int n;
vector<int> start_state;
vector<vector<int>> C;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
start_state.resize(n);
for (int i = 0; i < n; i++) cin >> start_state[i];
C.assign(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> C[i][j];
}
}
vector<int> target = start_state;
sort(target.begin(), target.end());
map<vector<int>, long long> dist;
priority_queue<
pair<long long, vector<int>>,
vector<pair<long long, vector<int>>>,
greater<pair<long long, vector<int>>>
> pq;
dist[start_state] = 0;
pq.push({0, start_state});
while (!pq.empty()) {
auto [d, cur] = pq.top();
pq.pop();
if (d != dist[cur]) continue;
if (cur == target) {
cout << d << '\n';
return 0;
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
vector<int> nxt = cur;
swap(nxt[i], nxt[j]);
long long nd = d + C[i][j];
if (!dist.count(nxt) || nd < dist[nxt]) {
dist[nxt] = nd;
pq.push({nd, nxt});
}
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcKCmNvbnN0IGxvbmcgbG9uZyBJTkYgPSAxZTE4OwoKaW50IG47CnZlY3RvcjxpbnQ+IHN0YXJ0X3N0YXRlOwp2ZWN0b3I8dmVjdG9yPGludD4+IEM7CgpzaWduZWQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgY2luID4+IG47CgogICAgc3RhcnRfc3RhdGUucmVzaXplKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiBzdGFydF9zdGF0ZVtpXTsKCiAgICBDLmFzc2lnbihuLCB2ZWN0b3I8aW50PihuKSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBDW2ldW2pdOwogICAgICAgIH0KICAgIH0KCiAgICB2ZWN0b3I8aW50PiB0YXJnZXQgPSBzdGFydF9zdGF0ZTsKICAgIHNvcnQodGFyZ2V0LmJlZ2luKCksIHRhcmdldC5lbmQoKSk7CgogICAgbWFwPHZlY3RvcjxpbnQ+LCBsb25nIGxvbmc+IGRpc3Q7CgogICAgcHJpb3JpdHlfcXVldWU8CiAgICAgICAgcGFpcjxsb25nIGxvbmcsIHZlY3RvcjxpbnQ+PiwKICAgICAgICB2ZWN0b3I8cGFpcjxsb25nIGxvbmcsIHZlY3RvcjxpbnQ+Pj4sCiAgICAgICAgZ3JlYXRlcjxwYWlyPGxvbmcgbG9uZywgdmVjdG9yPGludD4+PgogICAgPiBwcTsKCiAgICBkaXN0W3N0YXJ0X3N0YXRlXSA9IDA7CiAgICBwcS5wdXNoKHswLCBzdGFydF9zdGF0ZX0pOwoKICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgIGF1dG8gW2QsIGN1cl0gPSBwcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKCiAgICAgICAgaWYgKGQgIT0gZGlzdFtjdXJdKSBjb250aW51ZTsKCiAgICAgICAgaWYgKGN1ciA9PSB0YXJnZXQpIHsKICAgICAgICAgICAgY291dCA8PCBkIDw8ICdcbic7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgbjsgaisrKSB7CgogICAgICAgICAgICAgICAgdmVjdG9yPGludD4gbnh0ID0gY3VyOwogICAgICAgICAgICAgICAgc3dhcChueHRbaV0sIG54dFtqXSk7CgogICAgICAgICAgICAgICAgbG9uZyBsb25nIG5kID0gZCArIENbaV1bal07CgogICAgICAgICAgICAgICAgaWYgKCFkaXN0LmNvdW50KG54dCkgfHwgbmQgPCBkaXN0W254dF0pIHsKICAgICAgICAgICAgICAgICAgICBkaXN0W254dF0gPSBuZDsKICAgICAgICAgICAgICAgICAgICBwcS5wdXNoKHtuZCwgbnh0fSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=