#include <stdio.h>
#include <stack>
#include <queue>
bool check_is_valid_order(std::queue<int> &order){
std::stack<int> S;//臨時棧
int n = order.size();//獲得測試隊列,即出棧次序的長度
for (int i = 1; i <= n; i++){
S.push(i);//將1,2,3,4,5,6,7,8......入棧
while(!S.empty() && order.front() == S.top()){//如果棧S不爲空,且 測試隊列的頭 == 棧頂
S.pop();//棧頂和隊列頭同時彈出
order.pop();
}
}
if (!S.empty()){//如果棧S不爲空,說明測試隊列的次序 不滿足合法出棧次序
return false;
}
return true;
}
int main(){
int n;
int train;
scanf("%d", &n);
while(n){
scanf("%d", &train);
while (train){
std::queue<int> order;
order.push(train);
for (int i = 1; i < n; i++){
scanf("%d", &train);
order.push(train);
}
if (check_is_valid_order(order)){
printf("Yes\n");
}
else{
printf("No\n");
}
scanf("%d", &train);
}
printf("\n");
scanf("%d", &n);
}
return 0;
}