#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
typedef long long Int;

struct BFF
{
    Int l,r;
};

Int gens[100001];
Int minmoves=999999999;
bool seen[100001];
BFF BestFriendArray[100001];
Int n;
bool alert=false;

/**
Trying for 50pts
or even more if the time bomb works fine.
**/

bool TimeIsOK()
{
    double thetime=(double)clock() / (double)CLOCKS_PER_SEC;

    if (thetime<0.15)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool Nice()
{
    Int i;

    for (i=1;i<=n;i++)
    {
        seen[i]=false;
    }
    for (i=BestFriendArray[0].r;i<=n;i=BestFriendArray[i].r)
    {
        if (seen[ gens[i] ])
        {
            if (gens[i]!=gens[ BestFriendArray[i].l ])
            {
                return false;
            }
        }
        else
        {
            seen[ gens[i] ]=true;
        }
    }

    return true;
}

bool Exists(Int k)
{
    Int i;

    for (i=BestFriendArray[0].r;i<=n;i=BestFriendArray[i].r)
    {
        if (gens[i]==k)
        return true;
    }

    return false;
}

void Batrak(Int moves)
{
    if (!TimeIsOK())
    {
        alert=true;
        return;
    }
    if (moves>=minmoves)
    {
        return;
    }
    if (Nice())
    {
        if (minmoves>moves)
        {
            minmoves=moves;
            return;
        }
    }

    Int i,j;
    Int uk;

    for (i=1;i<=n;i++)
    {
        if (Exists(i))
        {
            for (j=BestFriendArray[0].r;j<=n;j=BestFriendArray[j].r)
            {
                if (gens[j]==i)
                {
                    BestFriendArray[ BestFriendArray[j].l ].r=BestFriendArray[j].r;
                    BestFriendArray[ BestFriendArray[j].r ].l=BestFriendArray[j].l;
                }
            }
            Batrak(moves+1);

            if (alert)
            return;

            for (j=1;j<=n;j++)
            {
                if (gens[j]==i)
                {
                    BestFriendArray[ BestFriendArray[j].l ].r=j;
                    BestFriendArray[ BestFriendArray[j].r ].l=j;
                }
            }
        }
    }
}

int main()
{
    Int i;

    scanf("%lld",&n);

    for (i=1;i<=n;i++)
    {
        scanf("%lld",&gens[i]);
        BestFriendArray[i].l=i-1;
        BestFriendArray[i].r=i+1;
    }
    BestFriendArray[0].r=1;
    gens[0]=0;

    Batrak(0);

    printf("%lld\n",minmoves);

    return 0;
}
