#include <bits/stdc++.h>
template <typename T1, typename T2>
std::ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& p) {
  return os << "(" << p.first << ", " << p.second << ")";
}
template <typename C>
std::ostream& _debug_go(std::ostream& os, const C& v) {
  bool first = true;
  os << "[";
  for (auto i : v) {
    if (!first) os << ", ";
    os << i;
    first = false;
  }
  return os << "]";
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& v) {
  return _debug_go(os, v);
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const std::set<T>& v) {
  return _debug_go(os, v);
}
template <typename T1, typename T2>
std::ostream& operator<<(std::ostream& os, const std::map<T1, T2>& v) {
  return _debug_go(os, v);
}
struct Debugger {
  template <typename T>
  Debugger& operator,(const T& v) {
    std::cerr << v << " ";
    return *this;
  }
} dbg;
using namespace std;
using uint = uint32_t;
using llint = int64_t;
using ullint = uint64_t;
template <typename T = int>
using Pt = complex<T>;
template <typename T>
T cross(const Pt<T>& a, const Pt<T>& b) {
  return a.real() * b.imag() - a.imag() * b.real();
}
const int MAX_N = 3e5 + 5;
struct Permutation {
  vector<int> p;
};
template <typename RAI>
vector<pair<int, int>> sortFar(RAI begin, RAI end) {
  auto P = begin;
  int N = end - begin;
  map<int, int> ix;
  for (int i = (0); i < (N); ++i) {
    ix[P[i]] = i;
  }
  vector<pair<int, int>> ans;
  auto doSwap = [&](int i, int j) {
    swap(ix[P[i]], ix[P[j]]);
    swap(P[i], P[j]);
    ans.push_back({i, j});
  };
  for (int i = (0); i < (N - 1); ++i) {
    if (ix[i] == i) continue;
    if (ix[i] < N / 2) {
      doSwap(ix[i], N - 1);
      doSwap(N - 1, i);
    } else if (i >= N / 2) {
      int old = ix[i];
      doSwap(old, 0);
      doSwap(0, i);
      doSwap(old, 0);
    } else {
      int old = ix[i];
      doSwap(old, 0);
      doSwap(0, N - 1);
      doSwap(N - 1, i);
      if (i != 0 && old != N - 1) {
        doSwap(old, 0);
      }
    }
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int N;
  static int P[MAX_N];
  cin >> N;
  for (int i = (0); i < (N); ++i) {
    cin >> P[i];
    --P[i];
  }
  auto ans = sortFar(P, P + N);
  cout << ans.size() << '\n';
  for (auto [i, j] : ans) {
    cout << i + 1 << " " << j + 1 << '\n';
  }
  return 0;
}
