#include<stdio.h>
#include<algorithm>
#define MAX 10005
int cmp(const void *a , const void *b)
{
return *(int *)a-*(int *)b ;
}
int s[MAX] , k , n , las[MAX] , mid[MAX] ,idx;
bool tag ;
int Findpos(int begin , int end , int cnt )
{
for(int i = begin ; i <= end ; i ++)
if(cnt == mid[i])
return i ;
return -1;
}
void Preorder(int lb , int le ,int mb , int me )
{
if(le < lb || me < mb)
return ;
if(me == mb )
{
s[k++] = mid[me] ;
return ;
}
int pos = Findpos(mb , me , las[le] );
s[k++] = las[le] ;
if(pos<0)
tag = true ;
if(tag)
return ;
Preorder(lb , lb-mb+pos-1 , mb , pos-1 );
Preorder(lb-mb+pos , le - 1 , pos + 1 , me );
}
int main(void)
{
while(scanf("%d",&n)!=EOF)
{
tag = false ;
k = 0 ;
int i ;
for( i = 1 ; i <= n ; i ++)
{
scanf("%d",&las[i]);
mid[i] = las[i] ;
}
qsort(mid,n + 1,sizeof(mid[1]),cmp) ;
Preorder(1 , n , 1 , n );
if(tag)
printf("No\n");
else
printf("Yes\n");
for(i = 0 ; i < n ; i ++)
printf("%d ",s[i]);
printf("\n");
}
return 0 ;
}