/*
TASK:psort
LANG:c++
*/
#include<iostream>

using namespace std;

int n,used[50000],sum=0;

struct elem
{
	int i;
	elem* next;
};

class perm
{
public:
	elem* first;
	elem* last;
	perm()
	{
		first=NULL;
		last=NULL;
	}
	void add(int i);
}a;

void perm::add(int i)
{
	elem *p;
	p=new elem;
	p->i=i;
	p->next=NULL;
	if(last==NULL)
		first=p;
	else
		last->next=p;
	last=p;
}

void g()
{
	int i,sum1=0,sumn=0,n1=1,nn=1;
	elem* p=a.first;
	for(i=0;i<n&&(n1||nn);i++,p=p->next)
	{
		if(n1)
		{
			if(p->i==1)
				n1=0;
			else
				sum1++;
		}
		if(nn)
		{
			if(p->i==n)
				nn=0;
			else
				sumn++;
		}
	}
	if(sumn<sum1)
	{
		if(sumn<n-1-sum1)
		{
			p=new elem;
			p->next=NULL;
			p->i=n+1;
			a.last->next=p;
			a.last=p;
			n++;
		}
		else
		{
			p=new elem;
			p->next=a.first;
			p->i=0;
			a.first=p;
			n++;
		}
	}
}

void izp(int x,int y)
{
	int i;
	for(i=x+1;i<y;i++)
	{
		if(used[i]==0)
			sum++;
		used[i]=1;
	}
	used[x]=y+5;
	used[y]=x+5;
}

void f()
{
	int i,j,min=0,r,x,y,t=0;
	elem *p,*q;
	if(a.last->i==1)
	{
		if(a.first->i==n)
		{
			x=a.first->i;
			a.first->i=a.last->i;
			a.last->i=x;
			sum+=2;
		}
		else
		{
		p=a.last;
		p->next=a.first;
		a.first=p;
		sum++;
		}
		t=1;
	}
	else if(a.first->i==n)
	{
		p=a.first;
		a.first=a.first->next;
		a.last->next=p;
		a.last=a.last->next;
		sum++;
		t=1;
	}
	if(!t)
		g();

	while(min!=50000)
	{
		min=50000;
		for(i=0,p=a.first;i<n-1;i++,p=p->next)
		{
			if(i!=n-1)
			if(used[p->i]!=1)
			{
				for(q=p->next,j=i+1;j<n&&used[q->i]==1;q=q->next,j++);
				if(j!=n&&(used[q->i]!=(p->i)+5)&&(used[p->i]!=(q->i)+5))
				{
					r=(q->i)-(p->i);
					if((r>1)&&min>r)
					{
						x=p->i;
						y=q->i;
						min=r;
					}
				}
			}
		}
		if(min!=50000)
			izp(x,y);
	}
}

int main()
{
	int i,p;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>p;
		a.add(p);
	}

	if(n==2)
	{
		if(a.first->i>a.last->i)
			cout<<1<<endl;
		else
			cout<<0<<endl;
		return 0;
	}

	f();
	cout<<sum<<endl;
	return 0;
}