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

const int MAX = 2048;
const bool DEBUG = false;

int min(int i1,int i2);

struct Knight {
    int iDoor;
    int iSeq;
    int foo;
    int bar;
};

class Solver {
    int iDoor1[MAX];
    int iDoor2[MAX];
    int iTime[MAX][MAX];
    Knight k[MAX];
    int iC;

    FILE* openInFile() {
        if (DEBUG)
            return fopen("round.in","r");
        else
            return stdin;
    }
    void load() {
        FILE *fin = openInFile();

        fscanf(fin,"%d",&iC);
        for (int i=0;i<iC;i++) {
            fscanf(fin,"%d",&(iDoor1[i]));
            iDoor1[i]--;
            k[iDoor1[i]].iDoor = 0;
            k[iDoor1[i]].iSeq = i;
        }
        for (int i=0;i<iC;i++) {
            fscanf(fin,"%d",&(iDoor2[i]));
            iDoor2[i]--;
            k[iDoor2[i]].iDoor = 1;
            k[iDoor2[i]].iSeq = i;
        }
    }
    bool present(int iPos,int iD1,int iD2) {
        if (k[iPos].iDoor == 0)
            return k[iPos].iSeq < iD1;
        else
            return k[iPos].iSeq < iD2;
    }
    int nextPos(int iP) {
        return (iP+1) % (iC*2);
    }
    int lastPos(int iP) {
        if (iP > 0)
            return iP-1;
        else
            return iC*2-1;
    }
    int enterL(int iD1,int iD2) {
        int iR1 = 0;
        int iDest = iDoor1[iD1];

        for (int i=0;i!=iDest;i = nextPos(i))
            if (present(i,iD1,iD2))
                iR1++;

        int iR2 = 0;

        for (int i=2*iC-1;i!=iDest;i = lastPos(i))
            if (present(i,iD1,iD2))
                iR2++;

        return min(iR1,iR2);
    }
    int enterR(int iD1,int iD2) {
        int iR1 = 0;
        int iDest = iDoor2[iD2];

        for (int i=iC-1;i!=iDest;i = lastPos(i))
            if (present(i,iD1,iD2))
                iR1++;

        int iR2 = 0;

        for (int i=iC;i!=iDest;i = nextPos(i))
            if (present(i,iD1,iD2))
                iR2++;

        return min(iR1,iR2);
    }
    void dp() {
        iTime[iC][iC] = 0;
        
        for (int i=iC-1;i>=0;i--) {
            iTime[i][iC] = enterL(i,iC) + iTime[i+1][iC];
            iTime[iC][i] = enterR(iC,i) + iTime[iC][i+1];
        }

        for (int iD1=iC-1;iD1>=0;iD1--)
            for (int iD2=iC-1;iD2>=0;iD2--)
                iTime[iD1][iD2] = min(enterL(iD1,iD2) + iTime[iD1+1][iD2],
                                      enterR(iD1,iD2) + iTime[iD1][iD2+1]);
    }
    void save(int iR) {
        printf("%d\n",iR);
    }

    public:

    Solver() {
        load();
    }
    void solve() {
        dp();
        save(iTime[0][0]);
    }
};

int min(int i1,int i2) {
    return i1 < i2 ? i1 : i2;
}

int main() {
    Solver *s = new Solver();
    s->solve();
    delete s;
    
    return 0;
}
