#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-10;
const long double PI = acos(-1.0);
const int INF = (int)1e9 + 5;
const long long LINF = (long long)1e18 + 5;
template <class T>
long long abs(const T& x) {
  return x < 0 ? -x : x;
}
template <class T>
long long round(const T& x) {
  return x < 0 ? x - 0.5 : x + 0.5;
}
template <class T>
bool chmin(T& x, const T& y) {
  if (y < x) {
    x = y;
    return true;
  }
  return false;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "{";
  for (typename vector<T>::const_iterator it = v.begin(); it != v.end(); ++it) {
    os << *it;
    if ((it + 1) != v.end()) os << ", ";
  }
  os << "}";
  return os;
}
template <class P, class Q>
ostream& operator<<(ostream& os, const pair<P, Q>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <class T>
bool chmax(T& x, const T& y) {
  if (x < y) {
    x = y;
    return true;
  }
  return false;
}
int main() {
  srand(time(0));
  int n;
  scanf("%d", &n);
  vector<int> a(n), posInB(n);
  for (int& x : a) {
    scanf("%d", &x);
    x--;
  }
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    x--;
    posInB[x] = i;
  }
  for (int& x : a) {
    x = posInB[x];
  }
  int sum = 0;
  vector<pair<int, int>> vec;
  vector<int> posInA(n);
  for (int i = 0; i < n; i++) {
    posInA[a[i]] = i;
  }
  auto makeSwap = [&](int i, int j) {
    sum += abs(i - j);
    vec.push_back(make_pair(i + 1, j + 1));
    swap(a[i], a[j]);
    swap(posInA[a[i]], posInA[a[j]]);
  };
  for (int val = 0; val < n; val++) {
    while (posInA[val] != val) {
      for (int j = posInA[val] - 1; j >= val; j--) {
        if (a[j] >= posInA[val]) {
          makeSwap(j, posInA[val]);
          break;
        }
      }
    }
  }
  printf("%d\n%d\n", sum, (int)vec.size());
  for (auto p : vec) {
    printf("%d %d\n", p.first, p.second);
  }
}
