//太难了,没看懂
//可以参考https://zhanglong.blog.csdn.net/article/details/104831434?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-3.readhide&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-3.readhide
//栈的知识 http://c.biancheng.net/view/478.html
#include <cstdio>
#include <stack>
#include <iostream>
using namespace std;
const int MAXN = 1000 + 10;
int n , target[MAXN];
int main(){
while(scanf("%d", &n) == 1){
stack<int> s;
int A = 1, B = 1;
for(int i = 1; i <= n; i++)
scanf("%d", &target[i]);
int ok = 1;
while(B <= n){
if(A == target[B]) {A++; B++;
}
else if(!s.empty() && s.top() == target[B])
{
cout <<"the top is " << s.top() << endl;
s.pop();
B++;
}
else if(A <= n) {
s.push(A++);
cout << "the push is " << s.top() << endl;
}
else {
ok = 0;
break;
}
}printf("%s\n", ok ? "Yes" : "No");
}
return 0;
}