#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 100;
int seg[4 * N], a[N], b[N], cur[N], pos[N];
vector<pair<int, int> > ans;
int n, cost;
void upd(int ind, int i = 1, int L = 0, int R = n) {
  if (R - L == 1) {
    seg[i] = pos[a[ind]];
    return;
  }
  int m = (L + R) / 2;
  if (ind < m)
    upd(ind, 2 * i, L, m);
  else
    upd(ind, 2 * i + 1, m, R);
  seg[i] = max(seg[2 * i], seg[2 * i + 1]);
}
int get(int l, int r, int i = 1, int L = 0, int R = n) {
  if (r <= L || R <= l) return 0;
  if (l <= L && R <= r) return seg[i];
  int m = (L + R) / 2;
  return max(get(l, r, 2 * i, L, m), get(l, r, 2 * i + 1, m, R));
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    cur[a[i]] = i;
  }
  for (int i = 0; i < n; i++) {
    cin >> b[i];
    pos[b[i]] = i;
  }
  for (int i = 0; i < n; i++) upd(i);
  for (int i = 0; i < n; i++) {
    if (a[i] == b[i]) continue;
    int j = cur[b[i]];
    while (j > i) {
      int tmp = get(0, j);
      int num = b[tmp];
      cost += j - cur[num];
      ans.push_back({cur[num], j});
      swap(a[j], a[cur[num]]);
      j = cur[num];
      swap(cur[num], cur[b[i]]);
      upd(cur[num]);
      upd(cur[b[i]]);
    }
  }
  cout << cost << '\n' << ans.size() << '\n';
  for (auto [v, u] : ans) cout << ++v << " " << ++u << '\n';
}
