#include <bits/stdc++.h>
#pragma comment(linker, "/stack:640000000")
using namespace std;
const double EPS = 1e-9;
const int INF = 0x7f7f7f7f;
const double PI = acos(-1.0);
template <class T>
inline T _abs(T n) {
  return ((n) < 0 ? -(n) : (n));
}
template <class T>
inline T _max(T a, T b) {
  return (!((a) < (b)) ? (a) : (b));
}
template <class T>
inline T _min(T a, T b) {
  return (((a) < (b)) ? (a) : (b));
}
template <class T>
inline T _swap(T& a, T& b) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}
template <class T>
inline T gcd(T a, T b) {
  return (b) == 0 ? (a) : gcd((b), ((a) % (b)));
}
template <class T>
inline T lcm(T a, T b) {
  return ((a) / gcd((a), (b)) * (b));
}
template <typename T>
string NumberToString(T Number) {
  ostringstream second;
  second << Number;
  return second.str();
}
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
int t, n, m;
vector<int> v, org;
int main() {
  while (~scanf("%d", &n)) {
    v.clear();
    org.clear();
    for (int i = 1; i <= (n); i++) {
      scanf("%d", &m);
      v.push_back(m);
      org.push_back(m);
    }
    sort(v.begin(), v.end());
    int tot = 0;
    for (int i = 0; i < (n); i++) {
      if (v[i] != org[i]) {
        for (int j = i + 1; j < n; j++) {
          if (v[i] == org[j]) {
            while (j > i) {
              tot++;
              printf("%d %d\n", j, j + 1);
              swap(org[j], org[j - 1]);
              j--;
            }
            break;
          }
        }
      }
    }
  }
  return 0;
}
