#pragma GCC Optimize("O3")
#include "bits/stdc++.h"

using namespace std;

typedef long long ll;
typedef pair<ll,ll>pairll;
typedef long double ld;

#define pb push_back
#define fr first
#define sc second
#define INF 1000000000000000007
#define MOD 1000000007
#define endl '\n'

ll n,d[32007],f;

queue<pairll>res;

void Rev(ll l,ll r){
    for(int i=0;i<=(r-l-1)/2;i++){
        swap(d[l+i],d[r-i]);
    }
    return ;
}

void D(ll l,ll r){
    if(l==r)return ;
    ll m1=(l+r)/2;
    ll x=0;
    for(int i=0;i<=m1-l;i++){
        if(d[m1-i]>d[m1+1+i] && m1+1+i<=r)x++;
        else break;
    }
    if(x>=1){
        res.push({m1-x+1,m1});
        res.push({m1+1,m1+x});
        f+=x*2;
        Rev(m1-x+1,m1);
        Rev(m1+1,m1+x);
    }
    if(x>0){
        res.push({m1-x+1,m1+x});
        Rev(m1-x+1,m1+x);
        f+=x*2;
        D(l,m1);
        D(m1+1,r);
    }
    
    return ;
}

void S(ll l,ll r){
    ll m1=(l+r)/2;
    if(l==r)return;
    S(l,m1);
    S(m1+1,r);
    D(l,r);
    return ;
}

int main() {

    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>d[i];
    }
    S(1,n);
    if(f>2000000){
        while(1){
            f--;
            
        }
    }
    cout<<res.size()<<endl;
    while(res.size()>0){
        cout<<res.front().fr<<" "<<res.front().sc<<endl;
        res.pop();
    }
    
    
    return 0;

}
