#include <bits/stdc++.h>
using namespace std;
template <class T>
T _abs(T n) {
  return (n < 0 ? -n : n);
}
template <class T>
T _max(T a, T b) {
  return (!(a < b) ? a : b);
}
template <class T>
T _min(T a, T b) {
  return (a < b ? a : b);
}
template <class T>
T sq(T x) {
  return x * x;
}
template <class T>
T gcd(T a, T b) {
  return (b != 0 ? gcd<T>(b, a % b) : a);
}
template <class T>
T lcm(T a, T b) {
  return (a / gcd<T>(a, b) * b);
}
template <class T>
bool inside(T a, T b, T c) {
  return a <= b && b <= c;
}
template <class T>
void setmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
void setmin(T &a, T b) {
  if (b < a) a = b;
}
const double EPS = 1e-9;
const double BIG = 1e19;
const int INF = 0x7f7f7f7f;
vector<pair<int, int> > V;
void countInv(int *a, int n) {
  int i, j;
  for (i = 1; i < n; i++) {
    for (j = i; j; j--) {
      if (a[j - 1] > a[j]) {
        swap(a[j - 1], a[j]);
        V.push_back(pair<int, int>(j - 1, j));
      } else
        break;
    }
  }
}
int main() {
  int h[300], v[300], n, i, j, a[300], x;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d", &h[i]);
    v[i] = 0;
  }
  for (i = 0; i < n; i++) {
    scanf("%d", &x);
    for (j = 0; j < n; j++) {
      if (h[j] == x && v[j] == 0) {
        v[j] = 1;
        break;
      }
    }
    a[i] = j;
  }
  countInv(a, n);
  int sz = (int)(int)V.size();
  printf("%d\n", sz);
  for (i = 0; i < sz; i++) printf("%d %d\n", V[i].first + 1, V[i].second + 1);
  return 0;
}
