#include using namespace std; #define finish(x) return cout << x << endl, 0; #define ll long long int n, x, idx[401][401], val[401][401]; vector a; vector > ans; int cost(int x, int y){ return idx[x][y] + val[a[x]][a[y]]; } void swapp(int x, int y){ int mid = x + 1; for(int i = x + 1 ; i < n ; i++){ if(cost(x, i) + cost(i, y) < cost(x, mid) + cost(mid, y)) mid = i; } if(cost(x, y) < cost(x, mid) + cost(mid, y)){ ans.push_back(make_pair(x, y)); swap(a[x], a[y]); } else{ if(x != mid) ans.push_back(make_pair(x, mid)); if(y != mid) ans.push_back(make_pair(mid, y)); swap(a[x], a[mid]); swap(a[mid], a[y]); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); freopen("sorting.in", "r", stdin); freopen("sorting.out", "w", stdout); cin >> n; for(int i = 0 ; i < n && cin >> x ; i++) a.push_back(x); int k; cin >> k; for(int i = 0 ; i < n ; i++) for(int j = 0 ; j < n ; j++) cin >> idx[i][j]; cin >> k; for(int i = 0 ; i < n ; i++) for(int j = 0 ; j < n ; j++) cin >> val[i][j]; for(int i = 0 ; i + 1 < n ; i++){ int mn = i; for(int j = i + 1 ; j < n ; j++) if(a[j] < a[mn]) mn = j; if(i == mn) continue; swapp(i, mn); } cout << ans.size() << endl; for(auto &i : ans) cout << i.first + 1 << " " << i.second + 1 << endl; }