#include <bits/stdc++.h>
using namespace std;
vector<long long> val;
long long max(long long a, long long b) {
  if (a >= b)
    return a;
  else
    return b;
}
long long min(long long a, long long b) {
  if (a >= b)
    return b;
  else
    return a;
}
long long checkprime(long long a) {
  long long flag = 1;
  for (long long i = 2; i <= sqrt(a); i++) {
    if (a % i == 0) {
      flag = 0;
      break;
    }
  }
  return flag;
}
unsigned long long power(unsigned long long x, long long y, long long p) {
  unsigned long long res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
unsigned long long modInverse(unsigned long long n, long long p) {
  return power(n, p - 2, p);
}
unsigned long long nCrModPFermat(unsigned long long n, long long r,
                                 long long p) {
  if (n < r) return 0;
  if (r == 0) return 1;
  unsigned long long fac[n + 1];
  fac[0] = 1;
  for (long long i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % p;
  return (fac[n] * modInverse(fac[r], p) % p * modInverse(fac[n - r], p) % p) %
         p;
}
long long factorial(long long n, long long p) {
  long long res = 1, i;
  for (i = 2; i <= n; i++) res = (long long)(res * i) % p;
  return res;
}
bitset<100000> b;
vector<long long> primes;
void Sieve() {
  b.set();
  b[0] = 0;
  b[1] = 0;
  for (long long i = 2; i < 100000; i++) {
    if (b[i]) {
      primes.push_back(i);
      for (long long j = i * i; j < 100000; j += i) {
        b[j] = 0;
      }
    }
  }
}
void sw(long long *a, long long *pos, long long num, long long dest_pos,
        vector<pair<long long, long long>> &v) {
  v.push_back(make_pair(dest_pos, pos[num]));
  long long temp = pos[num];
  pos[a[dest_pos - 1]] = temp;
  swap(a[dest_pos - 1], a[pos[num] - 1]);
  pos[num] = dest_pos;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n;
  cin >> n;
  long long a[n];
  long long pos[n + 1];
  pos[0] = 0;
  vector<pair<long long, long long>> v;
  long long og[n];
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    og[i] = a[i];
    pos[a[i]] = i + 1;
  }
  long long num = 1;
  while (num < n) {
    if (pos[num] == num) num++;
    if (pos[num] - num >= n / 2) {
      v.push_back(make_pair(num, pos[num]));
      long long tmp = pos[num];
      pos[a[num - 1]] = tmp;
      swap(a[num - 1], a[pos[num] - 1]);
      pos[num] = num;
    } else {
      long long val1 = abs(1 - pos[num]);
      long long val2 = abs(n - pos[num]);
      if (val1 >= n / 2) {
        v.push_back(make_pair(1, pos[num]));
        long long tmp = pos[num];
        pos[a[0]] = tmp;
        swap(a[0], a[pos[num] - 1]);
        pos[num] = 1;
        if (abs(num - pos[num]) >= n / 2) {
          sw(a, pos, num, num, v);
        } else {
          sw(a, pos, num, n, v);
          sw(a, pos, num, num, v);
        }
      } else {
        sw(a, pos, num, n, v);
        if (abs(num - pos[num]) >= n / 2) {
          sw(a, pos, num, num, v);
        } else {
          sw(a, pos, num, 1, v);
          sw(a, pos, num, num, v);
        }
      }
    }
    num++;
  }
  if (a[0] != 1 && a[n - 1] != n) {
    v.push_back(make_pair(1, n));
  }
  cout << v.size() << endl;
  for (long long i = 0; i < v.size(); i++) {
    cout << v[i].first << " " << v[i].second << "\n";
  }
}
