#include <bits/stdc++.h>
using namespace std;
void fre() {
  freopen("c://test//input.in", "r", stdin);
  freopen("c://test//output.out", "w", stdout);
}
template <class T1, class T2>
inline void gmax(T1 &a, T2 b) {
  if (b > a) a = b;
}
template <class T1, class T2>
inline void gmin(T1 &a, T2 b) {
  if (b < a) a = b;
}
const int N = 2020, M = 0, Z = 1e9 + 7, ms63 = 1061109567;
int casenum, casei;
int n;
int a[N], b[N], c[N * N], d[N * N];
int go[N], from[N];
int main() {
  while (~scanf("%d", &n)) {
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
    int ans = 0;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++)
        if (a[i] == b[j]) {
          go[i] = j;
          from[j] = i;
        }
      ans += abs(go[i] - i);
    }
    ans >>= 1;
    int tim = 0;
    for (int i = 1; i <= n; i++) {
      if (from[i] != i) {
        int j = from[i];
        while (go[i] != i) {
          int k;
          for (k = i; k <= n; k++)
            if (go[k] >= j) break;
          c[++tim] = j;
          d[tim] = k;
          int tmp = go[j];
          go[j] = go[k];
          go[k] = tmp;
          j = k;
        }
      }
    }
    printf("%d\n", ans);
    printf("%d\n", tim);
    for (int i = 1; i <= tim; i++) printf("%d %d\n", c[i], d[i]);
  }
  return 0;
}
