#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int maxn = 2009;
int a[maxn], b[maxn];
int q[maxn * maxn];
int mm[maxn];
int pos[maxn];
int ql, qr;
int cur;
int n;
struct segtree {
  int maxx[maxn * 4], pos[maxn * 4];
  void build(int o, int L, int R) {
    if (L == R) {
      maxx[o] = a[L];
      pos[o] = L;
      return;
    }
    int mid = L + R >> 1;
    maxx[o] = 0;
    if (mid >= L) {
      build(o * 2, L, mid);
      if (maxx[o * 2] > maxx[o]) {
        maxx[o] = maxx[o * 2];
        pos[o] = pos[o * 2];
      }
    }
    if (mid < R) {
      build(o * 2 + 1, mid + 1, R);
      if (maxx[o * 2 + 1] > maxx[o]) {
        maxx[o] = maxx[o * 2 + 1];
        pos[o] = pos[o * 2 + 1];
      }
    }
  }
  pair<int, int> query(int o, int L, int R) {
    pair<int, int> ret = make_pair(0, 0);
    if (ql <= L && qr >= R) {
      return make_pair(maxx[o], pos[o]);
    }
    int mid = L + R >> 1;
    if (ql <= mid) {
      ret = max(ret, query(o * 2, L, mid));
    }
    if (qr > mid) {
      ret = max(ret, query(o * 2 + 1, mid + 1, R));
    }
    return ret;
  }
  void modify(int o, int L, int R) {
    if (L == R) {
      maxx[o] = cur;
      pos[o] = L;
      return;
    }
    int mid = L + R >> 1;
    if (ql <= mid) {
      modify(o * 2, L, mid);
    }
    if (ql > mid) {
      modify(o * 2 + 1, mid + 1, R);
    }
    if (maxx[o * 2] > maxx[o * 2 + 1]) {
      maxx[o] = maxx[o * 2];
      pos[o] = pos[o * 2];
    } else {
      maxx[o] = maxx[o * 2 + 1];
      pos[o] = pos[o * 2 + 1];
    }
  }
} t;
pair<int, int> ans[maxn * maxn];
int rear = 0;
int cnt = 0;
void exchange(int i, int j) {
  cnt += abs(i - j);
  pos[a[j]] = i;
  pos[a[i]] = j;
  swap(a[i], a[j]);
  ql = i;
  cur = a[i];
  t.modify(1, 1, n);
  ql = j;
  cur = a[j];
  t.modify(1, 1, n);
  ans[++rear] = make_pair(i, j);
}
int main() {
  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]);
    mm[b[i]] = i;
  }
  for (int i = 1; i <= n; ++i) {
    a[i] = mm[a[i]];
    pos[a[i]] = i;
  }
  t.build(1, 1, n);
  for (int i = 1; i <= n; ++i) {
    int j = pos[i];
    while (a[j] != j) {
      ql = a[j];
      qr = j;
      pair<int, int> tmp = t.query(1, 1, n);
      exchange(j, tmp.second);
      j = tmp.second;
    }
  }
  printf("%d\n", cnt);
  printf("%d\n", rear);
  for (int i = 1; i <= rear; ++i)
    printf("%d %d\n", ans[i].first, ans[i].second);
  return 0;
}
