#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
class CA
{
public:
enum{N=1000};
int n;
vector<int> posttree,pt;
void run();
bool isabst(int l,int r);
bool ismabst(int l,int r);
};
bool CA::ismabst(int l,int r)
{
if(l>r) return true;
if(l==r) {posttree.push_back(pt[l]);return true;}
int i,j,m;
i=l+1;
while(i<=r&&pt[i]>=pt[l]) i++;
m=i;
while(i<=r&&pt[i]<pt[l]) i++;
if(i<=r) return false;
else
{
bool f1,f2;
f1=ismabst(l+1,m-1);
f2=ismabst(m,r);
posttree.push_back(pt[l]);
return f1&&f2;
}
}
bool CA::isabst(int l,int r)
{
if(l>r) return true;
if(l==r) {posttree.push_back(pt[l]);return true;}
int i,j,m;
i=l+1;
while(i<=r&&pt[i]<pt[l]) i++;
m=i;
while(i<=r&&pt[i]>=pt[l]) i++;
if(i<=r) return false;
else
{
bool f1,f2;
f1=isabst(l+1,m-1);
f2=isabst(m,r);
posttree.push_back(pt[l]);
return f1&&f2;
}
}
void CA::run()
{
cin>>n;
int i,t;
for(i=0;i<n;i++)
{
cin>>t;
pt.push_back(t);
}
if(isabst(0,n-1))
{
cout<<"YES"<<endl;
cout<<posttree[0];
for(i=1;i<posttree.size();i++) cout<<" "<<posttree[i];
}
else
{
posttree.clear();
if(ismabst(0,n-1))
{
cout<<"YES"<<endl;
cout<<posttree[0];
for(i=1;i<posttree.size();i++) cout<<" "<<posttree[i];
}
else
{
cout<<"NO"<<endl;
}
}
}
int main()
{
// freopen("test.in","r",stdin);
CA *a=new CA;
a->run();
return 0;
}