#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
int n,a[1000005],b[100005],mx[100005],mx2[100005],tms[100005];
int bres=0,res[1000005][2];
struct seq{
    int n,l,k;
    seq(){};
    seq(int a,int b,int c){
        n=a;
        l=b;
        k=c;
    }
    bool operator<(const seq &b)const{
        if(l==b.l) return k<b.k;
        return l<b.l;
    }
};

priority_queue<seq> q;

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&tms[i]);
    }
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        a[x]=i;
    }
    for(int i=1;i<=n;i++) b[i]=a[tms[i]];
    mx[1]=1;
    for(int i=2;i<=n;i++){
        if(b[i]<b[i-1]) mx[i]=mx[i-1]+1;
        else mx[i]=1;
    }
    mx2[1]=1;
    int br=0;
    for(int i=1;i<n;i++){
        if(mx[i+1]>mx[i]) mx2[i]=1;
        else{
            mx2[i]=mx[i];
            if(mx2[i]>1){
            br++;
            a[i]=br;
            q.push(seq(i,mx2[i],br));}
        }
    }
    mx2[n]=mx[n];
    if(mx2[n]>1){
        br++;
        a[n]=br;
        q.push(seq(n,mx2[n],br));
    }
    //for(int i=1;i<=n;i++) cout << b[i];  cout << endl;
    //for(int i=1;i<=n;i++) cout << mx[i]; cout << endl;
    //for(int i=1;i<=n;i++) cout << mx2[i];cout << endl;
    while(!q.empty()){
        if(a[q.top().n]!=q.top().k){q.pop();continue;}
        if(mx2[q.top().n]==1){q.pop();continue;}
        seq p=q.top();
        q.pop();
        if(p.n>p.l && b[p.n]<b[p.n-p.l]){
            br++;
            mx2[p.n-p.l+1]=mx2[p.n-p.l]+1;
            mx2[p.n-p.l]=1;
            a[p.n-p.l+1]=br;
            q.push(seq(p.n-p.l+1,mx2[p.n-p.l+1],br));
        }
        if(p.n<n && b[p.n+1]<b[p.n-p.l+1]){
            br++;
            mx2[p.n+1]=2;
            a[p.n+1]=br;
            q.push(seq(p.n+1,mx2[p.n+1],br));
        }
        mx2[p.n]=1;
        reverse(b+p.n-p.l+1,b+p.n+1);
        res[bres][0]=p.n-p.l+1;
        res[bres][1]=p.n;
        bres++;
        //printf("\n");
        //for(int i=1;i<=n;i++) printf("%d ",b[i]);printf("\n");
        //for(int i=1;i<=n;i++) printf("%d ",mx2[i]);printf("\n");
        //printf("\n");
    }
    printf("%d\n",bres);
    for(int i=0;i<bres;i++) printf("%d %d\n",res[i][0],res[i][1]);
    //system("pause");
    return 0;
}
