/*
* POJ_1363.cpp
*
* Created on: 2013年10月30日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1010;
int main(){
int n,p[maxn];
while(scanf("%d",&n)!=EOF,n){
int x;
int max = 0;
cin >> x;
while(x){
int i;
bool valid = true;//每有一个元素进栈都重新将合法状态valid设为true再进行比较
memset(p,0,sizeof(p));
for(i = 1 ; i <= n ; ++i){
if(valid){
int j;
bool ok = true;
for(j = x+1 ; j <= max ; ++j){//判断比x大的元素是否已经在栈内
if(p[j] == 1){
ok = false;
break;
}
}
if(!ok){
valid = false;
}else{
max = (max > x)?max:x;//调整进栈、出栈元素的最大值
p[x] = 2;//将x标记为出栈元素
int j;
for(j = x-1; j > 0 &&!p[j]; --j){//将所有比x小&&未进栈的元素进栈
p[j] = 1;
}
}
}
if(i < n){
cin >> x;
}
}
cout<<(valid?"Yes":"No")<<endl;
cin>>x;
}
cout<<endl;
}
return 0;
}