/*
TASK:round
LANG:C++
*/
#include <stdio.h>

#define min(a,b) ((a)<(b)?(a):(b))

int dynf[2048][2048];
int doors[2][2048];
int N;

int used[4096+4096];

void setused(int a, int isused){
     int pos=4096+a;
     if(isused==1){
       while(pos!=0) {used[pos]++;pos/=2;}
     }
     else{
       while(pos!=0) {used[pos]--;pos/=2;}
     }
}

int getbefore(int a){
     int pos=4096+a, result=used[pos], i;
     while(pos!=1){
      if(pos%2==1) result+=used[pos/2]-used[pos];
      pos/=2;
     }
/*     for(i=0;i<2*N;i++) printf("%d ", used[4096+i]);
     printf(" before %d -> %d\n", a, result);*/
     return result;
}

int getub(int a, int b){
    /*int i, res=0;
    for(i=a;i<=b;i++) if(used[i]) res++;
    return res;*/
//    if(a<0&&b<0||b<=a) return 0;
//    if(a<0) return getbefore(b);
/*    else if(getbefore(b)-getbefore(a)+used[4096+a]<0) return 0;*/
    return getbefore(b)-getbefore(a)+used[4096+a];
}

int mintry(int knight, int doorn){
    int res=0,i, res2=0, fin;
    if(doorn==0) {
     if(knight==0||knight==2*N-1) return 0;
     res=getub(0,knight-1);
     res2=getub(knight+1,2*N-1);
     if(res<res2) fin=res; else fin=res2;
    }
    else{
    if(knight==N-1||knight==N) return 0;
    if(knight<N){
     res=getub(0,knight-1)+getub(N,2*N-1);
     res2=getub(knight+1,N-1);
     if(res<res2) fin=res; else fin=res2;
    }
    else{
     res2=getub(0,N-1)+getub(knight+1,2*N-1);
     res=getub(N, knight-1);
     if(res<res2) fin=res; else fin=res2;
    }
    }
    return fin;
}

int main(void){
    int i, j;
    scanf("%d", &N);
    for(i=0;i<N;i++) {scanf("%d", &doors[0][i]);doors[0][i]--;}
    for(i=0;i<N;i++) {scanf("%d", &doors[1][i]);doors[1][i]--;}
    for(i=0;i<N;i++) {
     //setused(doors[0][i],1);
     for(j=0;j<N;j++) {
      setused(doors[1][j],1);
      if(j==0&&j==0) dynf[i][j]=0;
      else if(j==0) dynf[i][j]=dynf[i-1][j]+mintry(doors[0][i],0);
      else if(i==0) dynf[i][j]=dynf[i][j-1]+mintry(doors[1][j],1);
      else dynf[i][j]=min(dynf[i-1][j]+mintry(doors[0][i],0),
                          dynf[i][j-1]+mintry(doors[1][j],1));
      setused(doors[1][j],1);
     }
     setused(doors[0][i],1);
     for(j=0;j<N;j++) setused(doors[1][j],0);
    }
    printf("%d\n", dynf[N-1][N-1]-1);
/*    printf("%d\n", getbefore(0));
    printf("%d\n", getbefore(1));
    printf("%d\n", getbefore(2));
    printf("%d\n", getbefore(3));
    printf("%d\n", getbefore(4));
    printf("%d\n", getbefore(5));
    printf("%d\n", getbefore(6));
    printf("%d\n", getbefore(7));
    printf("%d\n", getbefore(8));*/
    return 0;
}
