#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1677721600")
using namespace std;
const int maxn = 2100;
int main() {
  int n;
  cin >> n;
  int per[maxn];
  int place[maxn];
  for (int i = 1; i <= (int)n; i++) cin >> per[i];
  for (int i = 1; i <= (int)n; i++) {
    int a;
    cin >> a;
    place[a] = i;
  }
  for (int i = 1; i <= (int)n; i++) per[i] = place[per[i]];
  vector<std::pair<int, int> > moves;
  long long cost = 0;
  while (1) {
    bool works = 0;
    std::pair<int, int> bestmove;
    vector<std::pair<int, int> > seq;
    for (int i = 1; i <= (int)n; i++) {
      if (per[i] > i) {
        while (!seq.empty() && seq.back().first < per[i]) seq.pop_back();
        seq.push_back(std::pair<int, int>(per[i], i));
      } else if (per[i] < i) {
        int high = seq.size();
        int low = 0;
        while (high > low) {
          int mid = (high + low) / 2;
          if (seq[mid].second >= per[i])
            high = mid;
          else
            low = mid + 1;
        }
        if (low < seq.size() && seq[low].first >= i) {
          if (!works || abs(i - seq[low].second) >
                            abs(bestmove.first - bestmove.second)) {
            bestmove = std::pair<int, int>(i, seq[low].second);
          }
          works = 1;
        }
      }
    }
    if (!works) break;
    moves.push_back(bestmove);
    cost += abs(bestmove.first - bestmove.second);
    swap(per[bestmove.first], per[bestmove.second]);
  }
  printf("%I64d ", (cost));
  ;
  printf("\n");
  ;
  printf("%d ", (moves.size()));
  ;
  printf("\n");
  ;
  for (int i = 0; i < (int)moves.size(); i++) {
    printf("%d ", (moves[i].first));
    ;
    printf("%d ", (moves[i].second));
    ;
    printf("\n");
    ;
  }
  return 0;
}
