#include <bits/stdc++.h>
using namespace std;
map<int, int> rec;
int arr[200002];
vector<int> adj[200002];
bool visited[200002];
vector<vector<int> > cycles;
stack<int> stk;
void dfs(int curr) {
  visited[curr] = true;
  stk.push(curr);
  for (int nxt : adj[curr]) {
    if (!visited[nxt]) {
      dfs(nxt);
    } else {
      vector<int> cyc;
      while (!stk.empty()) {
        cyc.push_back(stk.top());
        stk.pop();
      }
      cycles.push_back(cyc);
    }
  }
}
int ans[3000000];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
  }
  for (int i = 0; i < n; i++) {
    int g;
    scanf("%d", &g);
    rec[g] = i + 1;
  }
  map<int, int> pos;
  for (int i = 0; i < n; i++) {
    arr[i] = rec[arr[i]];
  }
  for (int i = n; i > 0; i--) arr[i] = arr[i - 1];
  int t = 0;
  int cost = 0;
  for (int num = n; num >= 1; num--) {
    int pos;
    for (int i = 1; i <= num; i++)
      if (arr[i] == num) pos = i;
    for (int i = pos + 1; i < num + 1; i++)
      if (arr[i] <= pos) {
        cost += (i)-pos;
        ans[t++] = pos * (n + 1) + i;
        arr[pos] = arr[i];
        arr[i] = num;
        pos = i;
      }
  }
  printf("%d\n%d\n", cost, t);
  for (int i = 0; i < t; i++)
    printf("%d %d\n", ans[i] / (n + 1), ans[i] % (n + 1));
  return 0;
}
