#include<iostream>
using namespace std;
#include <stdio.h>
int a[10000];
bool judgebackorder(int *a,int l)
{
int root=a[l-1];
int i=0;
for(;i<l-1;i++)
{
if(a[i]>root)
{
break;
}
}
int j=i;
for(;j<l-1;j++)
{
if(a[j]<root)
{
return false;
}
}
bool left=true;
if (i>0)
{
left=judgebackorder(a,i);
}
bool right=true;
if (i<(l-1))
{
right=judgebackorder(a+i,l-1-i);
}
return left&&right;
}
int main()
{
int n;
while(cin>>n)
{
for (int i=0;i<n;i++)
{
cin>>a[i];
}
if(judgebackorder(a,n))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
/**************************************************************
Problem: 1367
User: hrdjmax2
Language: C++
Result: Accepted
Time:20 ms
Memory:1556 kb
****************************************************************/